diff --git a/manifest b/manifest index d10a20caee..13ee3d046d 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index 065a0d4be2..8a5b305259 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -38aaf26e082bd95df6b64df43e1772fe6e20c4eb71307dcd97559cac7f11f8f1 \ No newline at end of file +3283bbd12a60f472ed03cb7c6209a605a3bf9f3d9083371e17840b56e8b3f559 \ No newline at end of file diff --git a/src/trigger.c b/src/trigger.c index 3b7d0d9e88..1c62fc231b 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -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;