From: drh <> Date: Fri, 14 Apr 2023 00:20:16 +0000 (+0000) Subject: Avoid double de-quoting of table names when processing RESTRICT actions X-Git-Tag: version-3.42.0~147 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2142b7c0a6ce3e01424b04155a168ae5cca9d21f;p=thirdparty%2Fsqlite.git Avoid double de-quoting of table names when processing RESTRICT actions in foreign key constraints. [https://bugs.chromium.org/p/chromium/issues/detail?id=1405220|Chromium 1405220]. FossilOrigin-Name: bb2b5ab172f0751c00343facf36fb12db10c88220caece31849f2711f12293d9 --- diff --git a/manifest b/manifest index adaa979df9..bcff963d99 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sobscure\sissue\swith\sALTER\sTABLE\sRENAME\sthat\scomes\sup\swith\striggers\nthat\shave\sUPDATE\sstatements\sthat\scontain\serrors.\n[forum:/forumpost/ff3840145a|Forum\spost\sff3840145a]. -D 2023-04-13T18:44:59.982 +C Avoid\sdouble\sde-quoting\sof\stable\snames\swhen\sprocessing\sRESTRICT\sactions\nin\sforeign\skey\sconstraints.\n[https://bugs.chromium.org/p/chromium/issues/detail?id=1405220|Chromium\s1405220]. +D 2023-04-14T00:20:16.995 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -577,7 +577,7 @@ F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873 F src/expr.c 6353f4d92d9f67ec3466d8e6978cd31a45e34cb755c4d11e689077f03f7c0a15 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 -F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002 +F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83 F src/func.c d187be57a886ddf4e6b7ef584a494361899be3df5eee6d4a747b68ff4aff4122 F src/global.c 428d2580a1cdf5dbe1f356d1feab83710ae0cc862ece0fb57bc8259e43838c74 F src/hash.c c6af5f96a7a76d000f07c5402c48c318c2566beecdee9e78b9d9f60ce7119565 @@ -991,7 +991,7 @@ F test/filter1.test 590f8ba9a0cd0823b80d89ac75c5ce72276189cef9225d2436adaf1ee87f F test/filter2.tcl 44e525497ce07382915f01bd29ffd0fa49dab3adb87253b5e5103ba8f93393e8 F test/filter2.test 485cf95d1f6d6ceee5632201ca52a71868599836f430cdee42e5f7f14666e30a F test/filterfault.test c08fb491d698e8df6c122c98f7db1c65ffcfcad2c1ab0e07fa8a5be1b34eaa8b -F test/fkey1.test 55663090ab6735319a52647057b9f19f8ec8c6c7d7da25170b71a75e3e5bdeb7 +F test/fkey1.test e563bcb4cb108ce3f40363cda4f84009dc89a39e2973076e5057ba99fca35378 F test/fkey2.test 1063d65e5923c054cfb8f0555a92a3ae0fa8c067275a33ee1715bd856cdb304c F test/fkey3.test 76d475c80b84ee7a5d062e56ccb6ea68882e2b49 F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d @@ -2052,8 +2052,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P ebc844fbfb046c5789efe21fd607c9301cb7b3d78edef72b2926b8c889b048a9 -R 11b569adbba936283758346fb63ba407 +P c4845a7c5f7f219848d3ee32eef0f9c69ad6dc6e8509da84d612f41e1e05f007 +R e187e9998555a73ed3722571589e480f U drh -Z ffa219ef522bb31dbb98533896877183 +Z 8502a1b30a3157b76d54d4493f6eaab0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4ed5f2dbb6..79e2afc1be 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c4845a7c5f7f219848d3ee32eef0f9c69ad6dc6e8509da84d612f41e1e05f007 \ No newline at end of file +bb2b5ab172f0751c00343facf36fb12db10c88220caece31849f2711f12293d9 \ No newline at end of file diff --git a/src/fkey.c b/src/fkey.c index cae6bb19d3..29609916b6 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -1317,22 +1317,22 @@ static Trigger *fkActionTrigger( if( action==OE_Restrict ){ int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - Token tFrom; - Token tDb; + SrcList *pSrc; Expr *pRaise; - tFrom.z = zFrom; - tFrom.n = nFrom; - tDb.z = db->aDb[iDb].zDbSName; - tDb.n = sqlite3Strlen30(tDb.z); - pRaise = sqlite3Expr(db, TK_RAISE, "FOREIGN KEY constraint failed"); if( pRaise ){ pRaise->affExpr = OE_Abort; } + pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); + if( pSrc ){ + assert( pSrc->nSrc==1 ); + pSrc->a[0].zName = sqlite3DbStrDup(db, zFrom); + pSrc->a[0].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName); + } pSelect = sqlite3SelectNew(pParse, sqlite3ExprListAppend(pParse, 0, pRaise), - sqlite3SrcListAppend(pParse, 0, &tDb, &tFrom), + pSrc, pWhere, 0, 0, 0, 0, 0 ); diff --git a/test/fkey1.test b/test/fkey1.test index db93be501d..46e7f64a19 100644 --- a/test/fkey1.test +++ b/test/fkey1.test @@ -272,4 +272,15 @@ do_catchsql_test 8.3 { REINDEX; } {1 {database disk image is malformed}} +# 2023-04-13 https://bugs.chromium.org/p/chromium/issues/detail?id=1405220 +# Avoid double-de-quoting of table names when processing foreign keys. +# +reset_db +do_execsql_test 9.1 { + PRAGMA foreign_keys = ON; + CREATE TABLE """1"("""2", """3" PRIMARY KEY); + CREATE TABLE """4"("""5" REFERENCES """1" ON DELETE RESTRICT); + DELETE FROM """1"; +} + finish_test