]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhance defensive mode so that it disallows CREATE TRIGGER statements if the
authordrh <>
Tue, 27 Sep 2022 00:56:45 +0000 (00:56 +0000)
committerdrh <>
Tue, 27 Sep 2022 00:56:45 +0000 (00:56 +0000)
statements within the trigger attempt to write on a shadow table.

FossilOrigin-Name: 3283bbd12a60f472ed03cb7c6209a605a3bf9f3d9083371e17840b56e8b3f559

manifest
manifest.uuid
src/trigger.c

index d10a20caeec1f3ebf677ca579066c04814402da7..13ee3d046dbf33e10e8077b586efd43c4ab08e28 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Reduced\sand\simproved\scomments\son\sthe\sconstraintCompatibleWithOuterJoin()\nfunction.
-D 2022-09-21T18:21:31.342
+C Enhance\sdefensive\smode\sso\sthat\sit\sdisallows\sCREATE\sTRIGGER\sstatements\sif\sthe\nstatements\swithin\sthe\strigger\sattempt\sto\swrite\son\sa\sshadow\stable.
+D 2022-09-27T00:56:45.695
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -654,7 +654,7 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
 F src/tokenize.c 1305797eab3542a0896b552c6e7669c972c1468e11e92b370533c1f37a37082b
 F src/treeview.c 07787f67cd297a6d09d04b8d70c06769c60c9c1d9080378f93929c16f8fd3298
-F src/trigger.c 61bea163b1fa3039bc572ed8312461b978e5c527e5301f302b078f4c1ccdec6a
+F src/trigger.c bc70c58e713dcfb6cabe5cc0bed71aedb02c3e9e128c6089a78aca945ba4d720
 F src/update.c c52a7991bece0453d22c77c08469512ee2f1391c12503fd347d1c939220c5877
 F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937
 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
@@ -2000,8 +2000,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 501609eddf2a46d51e8cd56477a22d4df142a166e78fe4322c0db11d1eed6687
-R 5d32b5cf2b23f775eb14de7cc8da03e5
+P 38aaf26e082bd95df6b64df43e1772fe6e20c4eb71307dcd97559cac7f11f8f1
+R 554e340d4f04eab8a3212a443865190e
 U drh
-Z 712cc37fc63bdeb87733f2b1fa708ae7
+Z e5d0f4cdaac4fabbf1ccc0e110546353
 # Remove this line to create a well-formed Fossil manifest.
index 065a0d4be236c363f89ef08585097cff22c7f7e3..8a5b305259c15671ca80f612feca247bb11c5d90 100644 (file)
@@ -1 +1 @@
-38aaf26e082bd95df6b64df43e1772fe6e20c4eb71307dcd97559cac7f11f8f1
\ No newline at end of file
+3283bbd12a60f472ed03cb7c6209a605a3bf9f3d9083371e17840b56e8b3f559
\ No newline at end of file
index 3b7d0d9e88c61742e744debcee508c80d997b25c..1c62fc231b5224b8a2206820a5d522c7d468c0a5 100644 (file)
@@ -351,6 +351,23 @@ void sqlite3FinishTrigger(
     Vdbe *v;
     char *z;
 
+    /* If this is a new CREATE TABLE statement, and if shadow tables
+    ** are read-only, and the trigger makes a change to a shadow table,
+    ** then raise an error - do not allow the trigger to be created. */
+    if( sqlite3ReadOnlyShadowTables(db) ){
+      TriggerStep *pStep;
+      for(pStep=pTrig->step_list; pStep; pStep=pStep->pNext){
+        if( pStep->zTarget!=0
+         && sqlite3ShadowTableName(db, pStep->zTarget)
+        ){
+          sqlite3ErrorMsg(pParse, 
+            "trigger \"%s\" may not write to shadow table \"%s\"",
+            pTrig->zName, pStep->zTarget);
+          goto triggerfinish_cleanup;
+        }
+      }
+    }
+
     /* Make an entry in the sqlite_schema table */
     v = sqlite3GetVdbe(pParse);
     if( v==0 ) goto triggerfinish_cleanup;