cloudflare / cloudflare/developer-platform

🐛 BUG: D1 Database triggers bypass D1 data type validation

オープン
#42 コメント 0 件 リアクション 1 件 担当者 0 名 GitHub で見る
product:d1
主要言語
言語のデータがありません
スター
1
フォーク
0
PR マージ指標
30日以内にマージされた PR はありません

説明

### Which Cloudflare product(s) does this pertain to?

D1

### What version(s) of the tool(s) are you using?

3.53.1 [Wrangler]

### What version of Node are you using?

_No response_

### What operating system and version are you using?

Mac Ventura 13.5.2

### Describe the Bug

### Observed behavior
Triggers can bypass column data type validation when updating a row

### Expected behavior
Triggers should be restricted by a column's data type when performing updates

### Steps to reproduce
- Setup:
```sql
CREATE TABLE IF NOT EXISTS test (
id TEXT PRIMARY KEY NOT NULL,
val INTEGER NOT NULL
);

CREATE TRIGGER update_on_change AFTER
UPDATE OF val ON test FOR EACH ROW
BEGIN
UPDATE test
SET
val = 'not_an_integer'
WHERE
id = NEW.id;

END;

INSERT INTO test (id, val) VALUES ('test', 1);
```
- Trigger the trigger:
```sql
UPDATE test SET val=2 WHERE id='test'
```
- the `val` column of the `test` row (`val` is defined as an Integer) now contains Text

### Please provide a link to a minimal reproduction

_No response_

### Please provide any relevant error logs

_No response_

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

D1 と Wrangler 3.53.1 を使用して、この issue の SQL 再現から始め、trigger が INTEGER 列にテキストを格納するか確認してください。D1 の trigger の更新パスとデータ型の検証を追跡し、同じ更新が 'not_an_integer' を拒否して列の型を保持することを確認してください。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
sql
領域
databases
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。