]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid double de-quoting of table names when processing RESTRICT actions
authordrh <>
Fri, 14 Apr 2023 00:23:13 +0000 (00:23 +0000)
committerdrh <>
Fri, 14 Apr 2023 00:23:13 +0000 (00:23 +0000)
in foreign key constraints.

FossilOrigin-Name: 5af7abffe7865375d9f5d1bede4d98bc5b26bd8c958398bda89a31f6a3f68524

manifest
manifest.uuid
src/fkey.c
test/fkey1.test

index 7812fad7fd61cbd01d50c0a3ef1c2c90e079e40e..7956e93ebe3424a978b067a14e3c201b5157c8c7 100644 (file)
--- 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.
-D 2023-04-13T18:49:58.462
+C Avoid\sdouble\sde-quoting\sof\stable\snames\swhen\sprocessing\sRESTRICT\sactions\nin\sforeign\skey\sconstraints.
+D 2023-04-14T00:23:13.764
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -573,7 +573,7 @@ F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef
 F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873
 F src/expr.c f307007b9e8ebc6cfbbc32609d93fe59a54ca2bb82d683ca0557d7847f99c774
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
-F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
+F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83
 F src/func.c d187be57a886ddf4e6b7ef584a494361899be3df5eee6d4a747b68ff4aff4122
 F src/global.c e06ff8e0acd85aec13563c9ecb44fbbf38232ccf73594998fd880b92d619594b
 F src/hash.c c6af5f96a7a76d000f07c5402c48c318c2566beecdee9e78b9d9f60ce7119565
@@ -987,7 +987,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
@@ -2046,9 +2046,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P fc12743763b2b5707ab101453c996bc18d514dcb6e9e0aaf6968618e9653a86d
-Q +c4845a7c5f7f219848d3ee32eef0f9c69ad6dc6e8509da84d612f41e1e05f007
-R ca72538a238c9acd9a2c7a1e6adf983c
+P cf651dee1279455dee5005701a2e8b76c9d2545b192919b84370d2e31a4a3baa
+Q +bb2b5ab172f0751c00343facf36fb12db10c88220caece31849f2711f12293d9
+R 319100232c0f2d99e3c3ca2880dae46d
 U drh
-Z d6cc86f24c5889eafb921e627ed95262
+Z 6e3f8d30a09e92eeecadeb8cb76ca110
 # Remove this line to create a well-formed Fossil manifest.
index edb1b3a5bbb61509a6e97ca82229cbb915de2139..83658205764ad88ce4ea932fd3a6303b852becc4 100644 (file)
@@ -1 +1 @@
-cf651dee1279455dee5005701a2e8b76c9d2545b192919b84370d2e31a4a3baa
\ No newline at end of file
+5af7abffe7865375d9f5d1bede4d98bc5b26bd8c958398bda89a31f6a3f68524
\ No newline at end of file
index cae6bb19d3041eb295312345903390d3093dc291..29609916b62443aa326620e1290f14f671b9fe5a 100644 (file)
@@ -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
       );
index db93be501dc522cc0325d2a4c5535f43832da2ce..46e7f64a193be12db2e3dd9e4802f75c11783580 100644 (file)
@@ -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