From 84c501bac16576916840daffb671b72cf1f75625 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 5 Nov 2018 23:01:45 +0000 Subject: [PATCH 01/10] Initial code to make shadow tables read-only to ordinary SQL. The now xShadowName method is added to the sqlite3_module object and is used to identify potential shadow tables. The SQLITE_PREPARE_SHADOW argument to sqlite3_prepare_v3() is defined. It is designed to permit writing to shadow tables, but is currently an unused placeholder. FossilOrigin-Name: 31942b3dd3f66eb0d9977bf1cadc2f2d7be7967cce2b55784be0b939dfef1985 --- ext/expert/sqlite3expert.c | 1 + ext/fts3/fts3.c | 18 ++++++++- ext/fts3/fts3_aux.c | 3 +- ext/fts3/fts3_term.c | 3 +- ext/fts3/fts3_tokenize_vtab.c | 3 +- ext/fts3/fts3_write.c | 3 +- ext/fts5/fts5_index.c | 6 ++- ext/fts5/fts5_main.c | 21 +++++++++- ext/fts5/fts5_storage.c | 3 +- ext/fts5/fts5_test_tok.c | 3 +- ext/fts5/fts5_vocab.c | 3 +- ext/misc/amatch.c | 3 +- ext/misc/btreeinfo.c | 1 + ext/misc/closure.c | 3 +- ext/misc/completion.c | 3 +- ext/misc/explain.c | 1 + ext/misc/fileio.c | 3 +- ext/misc/json1.c | 6 ++- ext/misc/memstat.c | 1 + ext/misc/stmt.c | 1 + ext/misc/templatevtab.c | 3 +- ext/misc/unionvtab.c | 3 +- ext/misc/vtablog.c | 1 + ext/rtree/geopoly.c | 3 +- ext/rtree/rtree.c | 22 +++++++++- manifest | 76 ++++++++++++++++++----------------- manifest.uuid | 2 +- src/build.c | 33 +++++++++++++++ src/dbpage.c | 1 + src/dbstat.c | 1 + src/pragma.c | 3 +- src/sqlite.h.in | 12 ++++++ src/sqliteInt.h | 1 + 33 files changed, 187 insertions(+), 63 deletions(-) diff --git a/ext/expert/sqlite3expert.c b/ext/expert/sqlite3expert.c index 695aaece8c..e88fb7e78c 100644 --- a/ext/expert/sqlite3expert.c +++ b/ext/expert/sqlite3expert.c @@ -644,6 +644,7 @@ static int idxRegisterVtab(sqlite3expert *p){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0, /* xShadowName */ }; return sqlite3_create_module(p->dbv, "expert", &expertModule, (void*)p); diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 3897054c7c..5899d4f244 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -3846,8 +3846,23 @@ static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){ return SQLITE_OK; } +/* +** Return true if zName is the extension on one of the shadow tables used +** by this module. +*/ +static int fts3ShadowName(const char *zName){ + static const char *azName[] = { + "content", "docsize", "segdir", "segments", "stat", + }; + unsigned int i; + for(i=0; idb, zSql, -1, SQLITE_PREPARE_PERSISTENT, + rc = sqlite3_prepare_v3(p->db, zSql, -1, + SQLITE_PREPARE_PERSISTENT | SQLITE_PREPARE_SHADOW, &pStmt, NULL); sqlite3_free(zSql); assert( rc==SQLITE_OK || pStmt==0 ); diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 394280b3f2..e4c13751f5 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -729,7 +729,8 @@ static int fts5IndexPrepareStmt( if( p->rc==SQLITE_OK ){ if( zSql ){ p->rc = sqlite3_prepare_v3(p->pConfig->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT, ppStmt, 0); + SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_SHADOW, + ppStmt, 0); }else{ p->rc = SQLITE_NOMEM; } @@ -780,7 +781,8 @@ static void fts5DataDelete(Fts5Index *p, i64 iFirst, i64 iLast){ rc = SQLITE_NOMEM; }else{ rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT, &p->pDeleter, 0); + SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_SHADOW, + &p->pDeleter, 0); sqlite3_free(zSql); } if( rc!=SQLITE_OK ){ diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index e9ec2de3a4..41c1c45eb0 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -890,7 +890,8 @@ static int fts5PrepareStatement( rc = SQLITE_NOMEM; }else{ rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT, &pRet, 0); + SQLITE_PREPARE_PERSISTENT |SQLITE_PREPARE_SHADOW, + &pRet, 0); if( rc!=SQLITE_OK ){ *pConfig->pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(pConfig->db)); } @@ -2645,9 +2646,24 @@ static void fts5SourceIdFunc( sqlite3_result_text(pCtx, "--FTS5-SOURCE-ID--", -1, SQLITE_TRANSIENT); } +/* +** Return true if zName is the extension on one of the shadow tables used +** by this module. +*/ +static int fts5ShadowName(const char *zName){ + static const char *azName[] = { + "config", "content", "data", "docsize", "idx" + }; + unsigned int i; + for(i=0; idb, zSql, -1, - SQLITE_PREPARE_PERSISTENT, &p->aStmt[eStmt], 0); + SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_SHADOW, + &p->aStmt[eStmt], 0); sqlite3_free(zSql); if( rc!=SQLITE_OK && pzErrMsg ){ *pzErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pC->db)); diff --git a/ext/fts5/fts5_test_tok.c b/ext/fts5/fts5_test_tok.c index 1818e16790..6f71e6534d 100644 --- a/ext/fts5/fts5_test_tok.c +++ b/ext/fts5/fts5_test_tok.c @@ -471,7 +471,8 @@ int sqlite3Fts5TestRegisterTok(sqlite3 *db, fts5_api *pApi){ 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; int rc; /* Return code */ diff --git a/ext/fts5/fts5_vocab.c b/ext/fts5/fts5_vocab.c index 27f2ff3b2c..c1b64249a4 100644 --- a/ext/fts5/fts5_vocab.c +++ b/ext/fts5/fts5_vocab.c @@ -755,10 +755,9 @@ int sqlite3Fts5VocabInit(Fts5Global *pGlobal, sqlite3 *db){ /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ 0, + /* xShadowName */ 0 }; void *p = (void*)pGlobal; return sqlite3_create_module_v2(db, "fts5vocab", &fts5Vocab, p, 0); } - - diff --git a/ext/misc/amatch.c b/ext/misc/amatch.c index 914e2633d4..142e354f28 100644 --- a/ext/misc/amatch.c +++ b/ext/misc/amatch.c @@ -1473,7 +1473,8 @@ static sqlite3_module amatchModule = { 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/btreeinfo.c b/ext/misc/btreeinfo.c index 131b210a79..3d818f20c0 100644 --- a/ext/misc/btreeinfo.c +++ b/ext/misc/btreeinfo.c @@ -411,6 +411,7 @@ int sqlite3BinfoRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0 /* xShadowName */ }; return sqlite3_create_module(db, "sqlite_btreeinfo", &binfo_module, 0); } diff --git a/ext/misc/closure.c b/ext/misc/closure.c index 74bffc7708..03f13c0c79 100644 --- a/ext/misc/closure.c +++ b/ext/misc/closure.c @@ -938,7 +938,8 @@ static sqlite3_module closureModule = { 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/completion.c b/ext/misc/completion.c index 4a4b918a37..72ad23df93 100644 --- a/ext/misc/completion.c +++ b/ext/misc/completion.c @@ -468,7 +468,8 @@ static sqlite3_module completionModule = { 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/explain.c b/ext/misc/explain.c index b228440f58..dc0c9d7669 100644 --- a/ext/misc/explain.c +++ b/ext/misc/explain.c @@ -280,6 +280,7 @@ static sqlite3_module explainModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0, /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/fileio.c b/ext/misc/fileio.c index 816a353c6e..e3e22ea4b0 100644 --- a/ext/misc/fileio.c +++ b/ext/misc/fileio.c @@ -888,7 +888,8 @@ static int fsdirRegister(sqlite3 *db){ 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0, /* xShadowName */ }; int rc = sqlite3_create_module(db, "fsdir", &fsdirModule, 0); diff --git a/ext/misc/json1.c b/ext/misc/json1.c index 85b1143f83..7cff3d28d8 100644 --- a/ext/misc/json1.c +++ b/ext/misc/json1.c @@ -2388,7 +2388,8 @@ static sqlite3_module jsonEachModule = { 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; /* The methods of the json_tree virtual table. */ @@ -2415,7 +2416,8 @@ static sqlite3_module jsonTreeModule = { 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/memstat.c b/ext/misc/memstat.c index 3194e752cc..dcd5742fd2 100644 --- a/ext/misc/memstat.c +++ b/ext/misc/memstat.c @@ -395,6 +395,7 @@ static sqlite3_module memstatModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0, /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/stmt.c b/ext/misc/stmt.c index dbaa0bd64d..d2b33e7416 100644 --- a/ext/misc/stmt.c +++ b/ext/misc/stmt.c @@ -266,6 +266,7 @@ static sqlite3_module stmtModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0, /* xShadowName */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/misc/templatevtab.c b/ext/misc/templatevtab.c index 95b5f60cab..d7efa2b40e 100644 --- a/ext/misc/templatevtab.c +++ b/ext/misc/templatevtab.c @@ -248,7 +248,8 @@ static sqlite3_module templatevtabModule = { /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ 0, - /* xRollbackTo */ 0 + /* xRollbackTo */ 0, + /* xShadowName */ 0 }; diff --git a/ext/misc/unionvtab.c b/ext/misc/unionvtab.c index 94a5c8f013..2d2053ce9a 100644 --- a/ext/misc/unionvtab.c +++ b/ext/misc/unionvtab.c @@ -1350,7 +1350,8 @@ static int createUnionVtab(sqlite3 *db){ 0, /* xRename */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; int rc; diff --git a/ext/misc/vtablog.c b/ext/misc/vtablog.c index 9e03fd455d..424b3457ff 100644 --- a/ext/misc/vtablog.c +++ b/ext/misc/vtablog.c @@ -492,6 +492,7 @@ static sqlite3_module vtablogModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0, /* xShadowName */ }; #ifdef _WIN32 diff --git a/ext/rtree/geopoly.c b/ext/rtree/geopoly.c index be582a3e1b..4ac3b0aa2f 100644 --- a/ext/rtree/geopoly.c +++ b/ext/rtree/geopoly.c @@ -1725,7 +1725,7 @@ static int geopolyFindFunction( static sqlite3_module geopolyModule = { - 2, /* iVersion */ + 3, /* iVersion */ geopolyCreate, /* xCreate - create a table */ geopolyConnect, /* xConnect - connect to an existing table */ geopolyBestIndex, /* xBestIndex - Determine search strategy */ @@ -1748,6 +1748,7 @@ static sqlite3_module geopolyModule = { rtreeSavepoint, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + rtreeShadowName /* xShadowName */ }; static int sqlite3_geopoly_init(sqlite3 *db){ diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c index c00648f6a2..fd1abef1ec 100644 --- a/ext/rtree/rtree.c +++ b/ext/rtree/rtree.c @@ -3325,8 +3325,24 @@ static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ return rc; } + +/* +** Return true if zName is the extension on one of the shadow tables used +** by this module. +*/ +static int rtreeShadowName(const char *zName){ + static const char *azName[] = { + "node", "parent", "rowid" + }; + unsigned int i; + for(i=0; ipMod==0 ) return 0; + pMod = pVTab->pMod->pModule; + assert( pMod!=0 ); + if( pMod->iVersion<3 ) return 0; + if( pMod->xShadowName==0 ) return 0; + return pMod->xShadowName(zTail+1); +} + /* ** This routine is called to report the final ")" that terminates ** a CREATE TABLE statement. @@ -1933,6 +1962,10 @@ void sqlite3EndTable( p = pParse->pNewTable; if( p==0 ) return; + if( pSelect==0 && isShadowTableName(db, p->zName) ){ + p->tabFlags |= TF_Shadow; + } + /* If the db->init.busy is 1 it means we are reading the SQL off the ** "sqlite_master" or "sqlite_temp_master" table on the disk. ** So do not write to the disk again. Extract the root page number diff --git a/src/dbpage.c b/src/dbpage.c index a73ea01bdb..4f46659018 100644 --- a/src/dbpage.c +++ b/src/dbpage.c @@ -407,6 +407,7 @@ int sqlite3DbpageRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0 /* xShadowName */ }; return sqlite3_create_module(db, "sqlite_dbpage", &dbpage_module, 0); } diff --git a/src/dbstat.c b/src/dbstat.c index ca0d541013..a2c6fe0894 100644 --- a/src/dbstat.c +++ b/src/dbstat.c @@ -720,6 +720,7 @@ int sqlite3DbstatRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ + 0 /* xShadowName */ }; return sqlite3_create_module(db, "dbstat", &dbstat_module, 0); } diff --git a/src/pragma.c b/src/pragma.c index 52d6338ca0..20656dc453 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -2477,7 +2477,8 @@ static const sqlite3_module pragmaVtabModule = { 0, /* xRename - rename the table */ 0, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ }; /* diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 18593a6440..02963f4542 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -3642,10 +3642,19 @@ int sqlite3_limit(sqlite3*, int id, int newVal); ** normalize a SQL statement are unspecified and subject to change. ** At a minimum, literal values will be replaced with suitable ** placeholders. +** +** [[SQLITE_PREPARE_SHADOW]] ^(
SQLITE_PREPARE_SHADOW
+**
When the SQLITE_PREPARE_SHADOW flag is set, writes to shadow +** tables are allowed. Shadow tables are ordinary tables associated +** with some virtual tables that serve as the storage for the virtual +** table. Shadow tables are normally read-only. Virtual table +** implementations use this flag so that they can write to their own +** shadow tables. ** */ #define SQLITE_PREPARE_PERSISTENT 0x01 #define SQLITE_PREPARE_NORMALIZE 0x02 +#define SQLITE_PREPARE_SHADOW 0x04 /* ** CAPI3REF: Compiling An SQL Statement @@ -6322,6 +6331,9 @@ struct sqlite3_module { int (*xSavepoint)(sqlite3_vtab *pVTab, int); int (*xRelease)(sqlite3_vtab *pVTab, int); int (*xRollbackTo)(sqlite3_vtab *pVTab, int); + /* The methods above are in versions 1 and 2 of the sqlite_module object. + ** Those below are for version 3 and greater. */ + int (*xShadowName)(const char*); }; /* diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 27caa1ace6..053ac01dc3 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -2001,6 +2001,7 @@ struct Table { #define TF_StatsUsed 0x0100 /* Query planner decisions affected by ** Index.aiRowLogEst[] values */ #define TF_HasNotNull 0x0200 /* Contains NOT NULL constraints */ +#define TF_Shadow 0x0400 /* True for a shadow table */ /* ** Test to see whether or not a table is a virtual table. This is From 5a65470300814c4f26c4952487385e33e5f286c2 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 6 Nov 2018 13:37:20 +0000 Subject: [PATCH 02/10] Add enforcement of read-only on shadow tables. This does not currently work since some virtual tables are attempting to update shadow tables using sqlite3_exec(). FossilOrigin-Name: f79b47c9859de597d5924870752dd7cab89c8f0608e5cceb2281f6ffb2e91930 --- manifest | 21 +++++++++------------ manifest.uuid | 2 +- src/build.c | 17 +++++++---------- src/delete.c | 4 ++++ src/prepare.c | 3 +++ src/sqliteInt.h | 1 + 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/manifest b/manifest index f7cb0936e7..2b975e775a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Initial\scode\sto\smake\sshadow\stables\sread-only\sto\sordinary\sSQL.\sThe\snow\nxShadowName\smethod\sis\sadded\sto\sthe\ssqlite3_module\sobject\sand\sis\sused\nto\sidentify\spotential\sshadow\stables.\s\sThe\sSQLITE_PREPARE_SHADOW\sargument\nto\ssqlite3_prepare_v3()\sis\sdefined.\s\sIt\sis\sdesigned\sto\spermit\swriting\sto\nshadow\stables,\sbut\sis\scurrently\san\sunused\splaceholder. -D 2018-11-05T23:01:45.801 +C Add\senforcement\sof\sread-only\son\sshadow\stables.\s\sThis\sdoes\snot\scurrently\swork\nsince\ssome\svirtual\stables\sare\sattempting\sto\supdate\sshadow\stables\susing\nsqlite3_exec(). +D 2018-11-06T13:37:20.946 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -448,14 +448,14 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 3ef104ecae8b1b5f0458be1f5fa7c1ecf25fdc322a9d63bb8151f89eb32d381e F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 -F src/build.c 3b611e7da095f2c4ff470c7368355be9c9c8e15fc234cb00eeea7c233108b2f2 +F src/build.c 5bc91901b05ac7a33a324854bd2aa892311e71b82a887f99f390bead39e29175 F src/callback.c 789bd33d188146f66c0dd8306472a72d1c05f71924b24a91caf6bd45cf9aba73 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c cfa87c8a9e3b5267a72faa3a592a497cd3810146c056c53a3472caf763c8556b F src/dbstat.c 9ad3f2d9d19a915d414870b9405b19493eed41975f3ad0d13f70fdd0831853b4 -F src/delete.c e1ac11c062a4a2ed29a9e9a63f4cbc7f0330291ae276d768b26fb2c5152cc3b4 +F src/delete.c 51c469c1a47740dc2c16277271776101db687b7fa7aa3d6304cb087d4035a9ee F src/expr.c 9aacc0b72348ba90010b672dcbbbe2fa56e1182043bc917a3a147b2bc57a5497 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 @@ -499,7 +499,7 @@ F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880 F src/pragma.c 3a5f39517cbe90af3271fb5dd2866a50fbcf4ced6cb464dcc80a6f763b415206 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 -F src/prepare.c f81f8d707e583192c28fea0b2e19385415b7d188123b23f49b038076408d7a69 +F src/prepare.c 108bbf7010d142ea00de1b5eb809e1c2823b1159978e18a7a4c7b2c22ff98b43 F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c bc8c79e56439b111e7d9415e44940951f7087e9466c3a9d664558ef0faf31073 @@ -509,7 +509,7 @@ F src/shell.c.in 060ccc327959bdc85c895015eb382017fd0cd000ebd47b7e8dda42f8aab0b66 F src/sqlite.h.in 612b5d40927cce9047413eaedd2f5a662b6360d08b00091c4213b30411c0fcbe F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 -F src/sqliteInt.h 7a6bbb9a8864af66d864eb4e4619e263b44a35b8604f6775e1e226133d14d5ef +F src/sqliteInt.h 91c7a27a6fe563db6e7b8323fc03392edf9371572c1db556e8aed48b07aea7b5 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -1776,10 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 11d98414eac467affb0b3cf0c7e5cc3d43184fc2b6e7e898bb5277b51ea9e1fa -R b572c18296089d812924dea7e0530e89 -T *branch * read-only-shadow -T *sym-read-only-shadow * -T -sym-trunk * +P 31942b3dd3f66eb0d9977bf1cadc2f2d7be7967cce2b55784be0b939dfef1985 +R a5e7ef5eefde106d658de7abaada1682 U drh -Z dcee1f2a6fee8069f27c592b55f8069d +Z 105cca41781319666607c23424ff661f diff --git a/manifest.uuid b/manifest.uuid index dfe15a5876..9c0a0a6164 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -31942b3dd3f66eb0d9977bf1cadc2f2d7be7967cce2b55784be0b939dfef1985 \ No newline at end of file +f79b47c9859de597d5924870752dd7cab89c8f0608e5cceb2281f6ffb2e91930 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 3f425d6fc2..fca5a92228 100644 --- a/src/build.c +++ b/src/build.c @@ -1904,8 +1904,8 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){ static int isShadowTableName(sqlite3 *db, char *zName){ char *zTail; /* Pointer to the last "_" in zName */ Table *pTab; /* Table that zName is a shadow of */ - VTable *pVTab; /* Virtual table corresponding to pTab */ - const sqlite3_module *pMod; /* module methods for pVTab */ + Module *pMod; /* Module for the virtual table */ + zTail = strrchr(zName, '_'); if( zTail==0 ) return 0; *zTail = 0; @@ -1913,14 +1913,11 @@ static int isShadowTableName(sqlite3 *db, char *zName){ *zTail = '_'; if( pTab==0 ) return 0; if( !IsVirtual(pTab) ) return 0; - pVTab = sqlite3GetVTable(db, pTab); - if( pVTab==0 ) return 0; - if( pVTab->pMod==0 ) return 0; - pMod = pVTab->pMod->pModule; - assert( pMod!=0 ); - if( pMod->iVersion<3 ) return 0; - if( pMod->xShadowName==0 ) return 0; - return pMod->xShadowName(zTail+1); + pMod = (Module*)sqlite3HashFind(&db->aModule, pTab->azModuleArg[0]); + if( pMod==0 ) return 0; + if( pMod->pModule->iVersion<3 ) return 0; + if( pMod->pModule->xShadowName==0 ) return 0; + return pMod->pModule->xShadowName(zTail+1); } /* diff --git a/src/delete.c b/src/delete.c index fa49f66666..c015eb43ee 100644 --- a/src/delete.c +++ b/src/delete.c @@ -57,6 +57,8 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ ** 2) It is a system table (i.e. sqlite_master), this call is not ** part of a nested parse and writable_schema pragma has not ** been specified. + ** 3) The table is a shadow table and the SQLITE_PREPARE_SHADOW flag + ** is omitted. ** ** In either case leave an error message in pParse and return non-zero. */ @@ -65,6 +67,8 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ || ( (pTab->tabFlags & TF_Readonly)!=0 && sqlite3WritableSchema(pParse->db)==0 && pParse->nested==0) + || ( (pTab->tabFlags & TF_Shadow)!=0 + && pParse->writeShadow==0) ){ sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); return 1; diff --git a/src/prepare.c b/src/prepare.c index 4d33f0b1e1..a6accbc7df 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -545,6 +545,9 @@ static int sqlite3Prepare( sParse.disableLookaside++; db->lookaside.bDisable++; } + if( prepFlags & SQLITE_PREPARE_SHADOW ){ + sParse.writeShadow = 1; + } /* Check to verify that it is possible to get a read lock on all ** database schemas. The inability to get a read lock indicates that diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 053ac01dc3..77f1011836 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3086,6 +3086,7 @@ struct Parse { u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */ u8 disableTriggers; /* True to disable triggers */ + u8 writeShadow; /* True if shadow tables are writable */ /************************************************************************** ** Fields above must be initialized to zero. The fields that follow, From fc25721c9e044a23b2a4ab904c68bbbe338d8165 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 6 Nov 2018 14:03:07 +0000 Subject: [PATCH 03/10] Only allow shadow table to be written from within a recursive SQL call. Omit the SQLITE_PREPARE_SHADOW flag. Some tests are failing because the tests depend on being able to write to shadow tables. FossilOrigin-Name: d890c6582524677666e6f5b5817331dec332ade16b2f744cbb8a3c7dd9b63e21 --- ext/fts3/fts3_write.c | 3 +-- ext/fts5/fts5_index.c | 6 ++---- ext/fts5/fts5_main.c | 3 +-- ext/fts5/fts5_storage.c | 3 +-- ext/rtree/rtree.c | 3 +-- manifest | 28 ++++++++++++++-------------- manifest.uuid | 2 +- src/delete.c | 7 ++++--- src/prepare.c | 3 --- src/sqlite.h.in | 9 --------- src/sqliteInt.h | 1 - 11 files changed, 25 insertions(+), 43 deletions(-) diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index 01ff53d4d3..8fc6589121 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -407,8 +407,7 @@ static int fts3SqlStmt( if( !zSql ){ rc = SQLITE_NOMEM; }else{ - rc = sqlite3_prepare_v3(p->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT | SQLITE_PREPARE_SHADOW, + rc = sqlite3_prepare_v3(p->db, zSql, -1, SQLITE_PREPARE_PERSISTENT, &pStmt, NULL); sqlite3_free(zSql); assert( rc==SQLITE_OK || pStmt==0 ); diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index e4c13751f5..394280b3f2 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -729,8 +729,7 @@ static int fts5IndexPrepareStmt( if( p->rc==SQLITE_OK ){ if( zSql ){ p->rc = sqlite3_prepare_v3(p->pConfig->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_SHADOW, - ppStmt, 0); + SQLITE_PREPARE_PERSISTENT, ppStmt, 0); }else{ p->rc = SQLITE_NOMEM; } @@ -781,8 +780,7 @@ static void fts5DataDelete(Fts5Index *p, i64 iFirst, i64 iLast){ rc = SQLITE_NOMEM; }else{ rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_SHADOW, - &p->pDeleter, 0); + SQLITE_PREPARE_PERSISTENT, &p->pDeleter, 0); sqlite3_free(zSql); } if( rc!=SQLITE_OK ){ diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index 41c1c45eb0..e5ff3936ff 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -890,8 +890,7 @@ static int fts5PrepareStatement( rc = SQLITE_NOMEM; }else{ rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT |SQLITE_PREPARE_SHADOW, - &pRet, 0); + SQLITE_PREPARE_PERSISTENT, &pRet, 0); if( rc!=SQLITE_OK ){ *pConfig->pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(pConfig->db)); } diff --git a/ext/fts5/fts5_storage.c b/ext/fts5/fts5_storage.c index 2bdc4703b9..70d7135113 100644 --- a/ext/fts5/fts5_storage.c +++ b/ext/fts5/fts5_storage.c @@ -137,8 +137,7 @@ static int fts5StorageGetStmt( rc = SQLITE_NOMEM; }else{ rc = sqlite3_prepare_v3(pC->db, zSql, -1, - SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_SHADOW, - &p->aStmt[eStmt], 0); + SQLITE_PREPARE_PERSISTENT, &p->aStmt[eStmt], 0); sqlite3_free(zSql); if( rc!=SQLITE_OK && pzErrMsg ){ *pzErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pC->db)); diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c index fd1abef1ec..4b044cb710 100644 --- a/ext/rtree/rtree.c +++ b/ext/rtree/rtree.c @@ -3451,8 +3451,7 @@ static int rtreeSqlInit( } zSql = sqlite3_mprintf(zFormat, zDb, zPrefix); if( zSql ){ - rc = sqlite3_prepare_v3(db, zSql, -1, - SQLITE_PREPARE_PERSISTENT | SQLITE_PREPARE_SHADOW, + rc = sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_PERSISTENT, appStmt[i], 0); }else{ rc = SQLITE_NOMEM; diff --git a/manifest b/manifest index 2b975e775a..99b9061685 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\senforcement\sof\sread-only\son\sshadow\stables.\s\sThis\sdoes\snot\scurrently\swork\nsince\ssome\svirtual\stables\sare\sattempting\sto\supdate\sshadow\stables\susing\nsqlite3_exec(). -D 2018-11-06T13:37:20.946 +C Only\sallow\sshadow\stable\sto\sbe\swritten\sfrom\swithin\sa\srecursive\sSQL\scall.\nOmit\sthe\sSQLITE_PREPARE_SHADOW\sflag.\s\sSome\stests\sare\sfailing\sbecause\sthe\ntests\sdepend\son\sbeing\sable\sto\swrite\sto\sshadow\stables. +D 2018-11-06T14:03:07.413 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -98,7 +98,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3 F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004 F ext/fts3/fts3_unicode.c 525a3bd9a7564603c5c061b7de55403a565307758a94600e8a2f6b00d1c40d9d F ext/fts3/fts3_unicode2.c cc04fc672bfd42b1e650398cb0bf71f64f9aae032cfe75bbcfe75b9cf966029c -F ext/fts3/fts3_write.c 0031c455ddd9a65cb840dbb844d5d4391cd0324007f43fed1fec2bc782dc0bd2 +F ext/fts3/fts3_write.c a85bc4885fde7f1b44c9de013b62f7cd3332dc59e208053d878729b1d04745bc F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100 F ext/fts3/tool/fts3cov.sh c331d006359456cf6f8f953e37f2b9c7d568f3863f00bb5f7eb87fea4ac01b73 @@ -115,9 +115,9 @@ F ext/fts5/fts5_buffer.c 1dd1ec0446b3acfc2d7d407eb894762a461613e2695273f48e449bf F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857 F ext/fts5/fts5_expr.c 5aef080ba3c8947e22f38ce1ff9fe548e4a740e72b77241f35ed941ae128d2c7 F ext/fts5/fts5_hash.c 32be400cf761868c9db33efe81a06eb19a17c5402ad477ee9efb51301546dd55 -F ext/fts5/fts5_index.c ddaea9e164670f4c2d97441da9b11499718114a8920f49f1982eb6a6c06863fa -F ext/fts5/fts5_main.c 5318b205988edf3fcce615182cbe29bd507ccb69a80e1c96f9f9a743db4394b9 -F ext/fts5/fts5_storage.c d35ccef429923a381eb39d834b14c8dc8a86eb0d1bab936f37b3adc3ad84f763 +F ext/fts5/fts5_index.c d1b2d7d92cb2b72b9465da35b7d7c30e4b426c7f208bf6f94ce86b50eed8a1cb +F ext/fts5/fts5_main.c 287a1a56580df304d7fa2fc1890f85b9cb6ac6b9e7c8af7dfa2151528db4b059 +F ext/fts5/fts5_storage.c 4bec8a1b3905978b22a67bca5f4a3cfdb94af234cf51efb36f4f2d733d278634 F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282db0d95 F ext/fts5/fts5_test_mi.c 65864ba1e5c34a61d409c4c587e0bbe0466eb4f8f478d85dc42a92caad1338e6 F ext/fts5/fts5_test_tok.c 80de1a4b1a3caa216c3be8862440f0117a8357dd9b7cfc5a2a2ce11fe6eb64ae @@ -362,7 +362,7 @@ F ext/repair/test/checkindex01.test 6945d0ffc0c1dc993b2ce88036b26e0f5d6fcc65da70 F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 F ext/rtree/geopoly.c 38ad90cab8dbd3dfba246d642f47366e40418e47fa55fe89f1078483d51b52c0 -F ext/rtree/rtree.c 8367dc4a71968767b2909f3b651905e3d11e22a24340f16b82763a2e08bd991f +F ext/rtree/rtree.c 7125183bf6c37b8b8ee1a04d2b0fe258531fd31650fdd050ed041817f1943d17 F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412 F ext/rtree/rtree1.test 309afc04d4287542b2cd74f933296832cc681c7b014d9405cb329b62053a5349 F ext/rtree/rtree2.test 5f25b01acd03470067a2d52783b2eb0a50bf836803d4342d20ca39e541220fe2 @@ -455,7 +455,7 @@ F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c cfa87c8a9e3b5267a72faa3a592a497cd3810146c056c53a3472caf763c8556b F src/dbstat.c 9ad3f2d9d19a915d414870b9405b19493eed41975f3ad0d13f70fdd0831853b4 -F src/delete.c 51c469c1a47740dc2c16277271776101db687b7fa7aa3d6304cb087d4035a9ee +F src/delete.c 5217ceccd488da04d66f86fdb3e833b50b68b7822b26a100d196f5070b4e6028 F src/expr.c 9aacc0b72348ba90010b672dcbbbe2fa56e1182043bc917a3a147b2bc57a5497 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 @@ -499,17 +499,17 @@ F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880 F src/pragma.c 3a5f39517cbe90af3271fb5dd2866a50fbcf4ced6cb464dcc80a6f763b415206 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 -F src/prepare.c 108bbf7010d142ea00de1b5eb809e1c2823b1159978e18a7a4c7b2c22ff98b43 +F src/prepare.c f81f8d707e583192c28fea0b2e19385415b7d188123b23f49b038076408d7a69 F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c bc8c79e56439b111e7d9415e44940951f7087e9466c3a9d664558ef0faf31073 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 61e867a906f140b73baf4ce7a201ad6dcba30820969f5618ee40e9a0d32c6f5f F src/shell.c.in 060ccc327959bdc85c895015eb382017fd0cd000ebd47b7e8dda42f8aab0b66f -F src/sqlite.h.in 612b5d40927cce9047413eaedd2f5a662b6360d08b00091c4213b30411c0fcbe +F src/sqlite.h.in 9399b09de527be1d055411d7b826125f8f816bb9ebb052de847969bd8c46d701 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 -F src/sqliteInt.h 91c7a27a6fe563db6e7b8323fc03392edf9371572c1db556e8aed48b07aea7b5 +F src/sqliteInt.h 7a6bbb9a8864af66d864eb4e4619e263b44a35b8604f6775e1e226133d14d5ef F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 31942b3dd3f66eb0d9977bf1cadc2f2d7be7967cce2b55784be0b939dfef1985 -R a5e7ef5eefde106d658de7abaada1682 +P f79b47c9859de597d5924870752dd7cab89c8f0608e5cceb2281f6ffb2e91930 +R 9c83260cf7477274baab6670a30d627e U drh -Z 105cca41781319666607c23424ff661f +Z 63edb3c381d916b8ce9e25126a1c39db diff --git a/manifest.uuid b/manifest.uuid index 9c0a0a6164..f8f0438cb2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f79b47c9859de597d5924870752dd7cab89c8f0608e5cceb2281f6ffb2e91930 \ No newline at end of file +d890c6582524677666e6f5b5817331dec332ade16b2f744cbb8a3c7dd9b63e21 \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index c015eb43ee..9325203826 100644 --- a/src/delete.c +++ b/src/delete.c @@ -57,8 +57,9 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ ** 2) It is a system table (i.e. sqlite_master), this call is not ** part of a nested parse and writable_schema pragma has not ** been specified. - ** 3) The table is a shadow table and the SQLITE_PREPARE_SHADOW flag - ** is omitted. + ** 3) The table is a shadow table and the current sqlite3_prepare() + ** is for a top-level SQL statement, not a nested SQL statement + ** issued by a virtual table implementation. ** ** In either case leave an error message in pParse and return non-zero. */ @@ -68,7 +69,7 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ && sqlite3WritableSchema(pParse->db)==0 && pParse->nested==0) || ( (pTab->tabFlags & TF_Shadow)!=0 - && pParse->writeShadow==0) + && pParse->db->nVdbeExec==0) ){ sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); return 1; diff --git a/src/prepare.c b/src/prepare.c index a6accbc7df..4d33f0b1e1 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -545,9 +545,6 @@ static int sqlite3Prepare( sParse.disableLookaside++; db->lookaside.bDisable++; } - if( prepFlags & SQLITE_PREPARE_SHADOW ){ - sParse.writeShadow = 1; - } /* Check to verify that it is possible to get a read lock on all ** database schemas. The inability to get a read lock indicates that diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 02963f4542..88476836c5 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -3642,19 +3642,10 @@ int sqlite3_limit(sqlite3*, int id, int newVal); ** normalize a SQL statement are unspecified and subject to change. ** At a minimum, literal values will be replaced with suitable ** placeholders. -** -** [[SQLITE_PREPARE_SHADOW]] ^(
SQLITE_PREPARE_SHADOW
-**
When the SQLITE_PREPARE_SHADOW flag is set, writes to shadow -** tables are allowed. Shadow tables are ordinary tables associated -** with some virtual tables that serve as the storage for the virtual -** table. Shadow tables are normally read-only. Virtual table -** implementations use this flag so that they can write to their own -** shadow tables. ** */ #define SQLITE_PREPARE_PERSISTENT 0x01 #define SQLITE_PREPARE_NORMALIZE 0x02 -#define SQLITE_PREPARE_SHADOW 0x04 /* ** CAPI3REF: Compiling An SQL Statement diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 77f1011836..053ac01dc3 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3086,7 +3086,6 @@ struct Parse { u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */ u8 disableTriggers; /* True to disable triggers */ - u8 writeShadow; /* True if shadow tables are writable */ /************************************************************************** ** Fields above must be initialized to zero. The fields that follow, From aef15e74c87b28f2a913fec58272b049916a01a8 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 6 Nov 2018 15:57:59 +0000 Subject: [PATCH 04/10] Turn on defensive mode for running test scripts. Does not yet work. FossilOrigin-Name: 1c1d24edbb732f2a2002a741c7a7afdd010b67e1b5e6d90ff36c6428897e7612 --- ext/fts5/test/fts5aa.test | 1 + manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/delete.c | 14 ++++++++------ test/tester.tcl | 1 + 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/ext/fts5/test/fts5aa.test b/ext/fts5/test/fts5aa.test index 6fa3ad8e63..b6a2499bed 100644 --- a/ext/fts5/test/fts5aa.test +++ b/ext/fts5/test/fts5aa.test @@ -409,6 +409,7 @@ do_test 14.3 { do_execsql_test 15.0 { INSERT INTO t1(t1) VALUES('integrity-check'); } +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 15.1 { UPDATE t1_content SET c1 = 'xyz xyz xyz xyz xyz abc' WHERE rowid = 1; } diff --git a/manifest b/manifest index 99b9061685..7194b86403 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Only\sallow\sshadow\stable\sto\sbe\swritten\sfrom\swithin\sa\srecursive\sSQL\scall.\nOmit\sthe\sSQLITE_PREPARE_SHADOW\sflag.\s\sSome\stests\sare\sfailing\sbecause\sthe\ntests\sdepend\son\sbeing\sable\sto\swrite\sto\sshadow\stables. -D 2018-11-06T14:03:07.413 +C Turn\son\sdefensive\smode\sfor\srunning\stest\sscripts.\s\sDoes\snot\syet\swork. +D 2018-11-06T15:57:59.184 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -128,7 +128,7 @@ F ext/fts5/fts5_vocab.c dfe3bfc7ccd39ef7d149c1828b6663995e580e9b315de029801be62d F ext/fts5/fts5parse.y eb526940f892ade5693f22ffd6c4f2702543a9059942772526eac1fde256bb05 F ext/fts5/mkportersteps.tcl 5acf962d2e0074f701620bb5308155fa1e4a63ba F ext/fts5/test/fts5_common.tcl b01c584144b5064f30e6c648145a2dd6bc440841 -F ext/fts5/test/fts5aa.test 87f4b50e755b52c6192c76ceccf4247d462bb44b52fa17358f273d8ce5d975f0 +F ext/fts5/test/fts5aa.test 840081efaee97f5ec570146bbdd79cfdfaea0ab303de3d5037b6d6c78b42ccdd F ext/fts5/test/fts5ab.test 9205c839332c908aaad2b01ab8670ece8b161e8f2ec8a9fabf18ca9385880bb7 F ext/fts5/test/fts5ac.test a7aa7e1fefc6e1918aa4d3111d5c44a09177168e962c5fd2cca9620de8a7ed6d F ext/fts5/test/fts5ad.test e8cf959dfcd57c8e46d6f5f25665686f3b6627130a9a981371dafdf6482790de @@ -455,7 +455,7 @@ F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c cfa87c8a9e3b5267a72faa3a592a497cd3810146c056c53a3472caf763c8556b F src/dbstat.c 9ad3f2d9d19a915d414870b9405b19493eed41975f3ad0d13f70fdd0831853b4 -F src/delete.c 5217ceccd488da04d66f86fdb3e833b50b68b7822b26a100d196f5070b4e6028 +F src/delete.c d058ed72fc9b975dbf42fd8bdacbb530106440595847dc8aba6bb1d138ca2c5f F src/expr.c 9aacc0b72348ba90010b672dcbbbe2fa56e1182043bc917a3a147b2bc57a5497 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 @@ -1352,7 +1352,7 @@ F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30 F test/temptable2.test d2940417496e2b9548e01d09990763fbe88c316504033256d51493e1f1a5ce6a F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc -F test/tester.tcl fa5656391e3b477508abe12b3b81f019b2e71397399ab38a2f32d8d7f3bf8e56 +F test/tester.tcl 9a4c02c89fec21b7fb2082143595ea64289289a23b30483733348bb17c1ae4a1 F test/thread001.test b61a29dd87cf669f5f6ac96124a7c97d71b0c80d9012746072055877055cf9ef F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P f79b47c9859de597d5924870752dd7cab89c8f0608e5cceb2281f6ffb2e91930 -R 9c83260cf7477274baab6670a30d627e +P d890c6582524677666e6f5b5817331dec332ade16b2f744cbb8a3c7dd9b63e21 +R e9f4d27ca7b2f873c7fcee04be6300fd U drh -Z 63edb3c381d916b8ce9e25126a1c39db +Z 9fe44fcd11ea00f63b017a2647f9f482 diff --git a/manifest.uuid b/manifest.uuid index f8f0438cb2..e9abd7bc87 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d890c6582524677666e6f5b5817331dec332ade16b2f744cbb8a3c7dd9b63e21 \ No newline at end of file +1c1d24edbb732f2a2002a741c7a7afdd010b67e1b5e6d90ff36c6428897e7612 \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index 9325203826..9380a0915e 100644 --- a/src/delete.c +++ b/src/delete.c @@ -50,6 +50,7 @@ Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){ ** writable return 0; */ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ + sqlite3 *db = pParse->db; /* A table is not writable under the following circumstances: ** ** 1) It is a virtual table and no implementation of the xUpdate method @@ -57,19 +58,20 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ ** 2) It is a system table (i.e. sqlite_master), this call is not ** part of a nested parse and writable_schema pragma has not ** been specified. - ** 3) The table is a shadow table and the current sqlite3_prepare() - ** is for a top-level SQL statement, not a nested SQL statement - ** issued by a virtual table implementation. + ** 3) The table is a shadow table, the database connection is in + ** defensive mode, and the current sqlite3_prepare() + ** is for a top-level SQL statement. ** ** In either case leave an error message in pParse and return non-zero. */ if( ( IsVirtual(pTab) - && sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ) + && sqlite3GetVTable(db, pTab)->pMod->pModule->xUpdate==0 ) || ( (pTab->tabFlags & TF_Readonly)!=0 - && sqlite3WritableSchema(pParse->db)==0 + && sqlite3WritableSchema(db)==0 && pParse->nested==0) || ( (pTab->tabFlags & TF_Shadow)!=0 - && pParse->db->nVdbeExec==0) + && (db->flags & SQLITE_Defensive)!=0 + && db->nVdbeExec==0) ){ sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); return 1; diff --git a/test/tester.tcl b/test/tester.tcl index 14808d9cd9..97217a8224 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -136,6 +136,7 @@ if {[info command sqlite_orig]==""} { # uplevel 1 sqlite_orig $args } + sqlite3_db_config [lindex $args 0] DEFENSIVE 1 } } From 0f0d3ddf71fdb1d231a66b3e05fe991b6df97be2 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 6 Nov 2018 19:26:04 +0000 Subject: [PATCH 05/10] Enable DEFENSIVE mode by default for tests. This requires lots of case of turning DEFENSIVE off in order to dodgy things to the database for testing purposes. No all of those cases are yet handled, so "make test" does not run to completion. FossilOrigin-Name: a1d6c6712c3304fd736077432c8c180692cf7d79be7f3a073510b6dab0eb951f --- ext/fts5/test/fts5corrupt.test | 4 +- ext/fts5/test/fts5corrupt2.test | 2 + ext/fts5/test/fts5corrupt3.test | 9 ++++ ext/fts5/test/fts5integrity.test | 1 + ext/fts5/test/fts5rebuild.test | 2 + ext/fts5/test/fts5rowid.test | 2 + ext/fts5/test/fts5version.test | 4 +- ext/fts5/test/fts5vocab.test | 2 +- ext/rtree/rtree8.test | 4 ++ ext/rtree/rtreeA.test | 3 +- ext/rtree/rtreecheck.test | 4 +- manifest | 74 ++++++++++++++++---------------- manifest.uuid | 2 +- src/delete.c | 3 +- src/vacuum.c | 3 +- test/corrupt2.test | 2 + test/fts3auto.test | 2 + test/fts3corrupt.test | 1 + test/fts3corrupt2.test | 1 + test/fts3corrupt3.test | 1 + test/fts3corrupt4.test | 5 ++- test/fts3cov.test | 3 ++ test/fts3d.test | 2 + test/fts3defer.test | 8 ++++ test/fts3defer2.test | 6 +++ test/fts3matchinfo.test | 6 +++ test/fts3misc.test | 1 + test/fts3query.test | 2 + test/fts3snippet.test | 2 + test/fts4check.test | 8 ++++ test/fts4growth.test | 1 + test/fts4merge.test | 2 + test/fts4opt.test | 2 + test/tester.tcl | 2 +- 34 files changed, 128 insertions(+), 48 deletions(-) diff --git a/ext/fts5/test/fts5corrupt.test b/ext/fts5/test/fts5corrupt.test index 1462912c65..5f13513ec7 100644 --- a/ext/fts5/test/fts5corrupt.test +++ b/ext/fts5/test/fts5corrupt.test @@ -41,6 +41,7 @@ db_save do_execsql_test 1.2 { INSERT INTO t1(t1) VALUES('integrity-check') } set segid [lindex [fts5_level_segids t1] 0] +sqlite3_db_config db DEFENSIVE 0 do_test 1.3 { execsql { DELETE FROM t1_data WHERE rowid = fts5_rowid('segment', $segid, 4); @@ -50,6 +51,7 @@ do_test 1.3 { do_test 1.4 { db_restore_and_reopen + sqlite3_db_config db DEFENSIVE 0 execsql { UPDATE t1_data set block = X'00000000' || substr(block, 5) WHERE rowid = fts5_rowid('segment', $segid, 4); @@ -89,7 +91,7 @@ do_execsql_test 3.0 { do_execsql_test 3.1 { SELECT * FROM t3 WHERE t3 MATCH 'o' } {{one o} {three o} {five o}} - +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test 3.1 { DELETE FROM t3_content WHERE rowid = 3; SELECT * FROM t3 WHERE t3 MATCH 'o'; diff --git a/ext/fts5/test/fts5corrupt2.test b/ext/fts5/test/fts5corrupt2.test index 74721e5398..a815320b76 100644 --- a/ext/fts5/test/fts5corrupt2.test +++ b/ext/fts5/test/fts5corrupt2.test @@ -99,6 +99,7 @@ foreach {tno stmt} { set lrowid [db one {SELECT max(rowid) FROM t1_data WHERE (rowid & $mask)=0}] set nbyte [db one {SELECT length(block) FROM t1_data WHERE rowid=$lrowid}] set all [db eval {SELECT rowid FROM t1}] +sqlite3_db_config db DEFENSIVE 0 for {set i [expr $nbyte-2]} {$i>=0} {incr i -1} { do_execsql_test 2.$i.1 { BEGIN; @@ -248,6 +249,7 @@ foreach {tn hdr} { #-------------------------------------------------------------------- reset_db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 6.1 { CREATE VIRTUAL TABLE x5 USING fts5(tt); INSERT INTO x5 VALUES('a'); diff --git a/ext/fts5/test/fts5corrupt3.test b/ext/fts5/test/fts5corrupt3.test index 72e9ab17c5..ec823b320f 100644 --- a/ext/fts5/test/fts5corrupt3.test +++ b/ext/fts5/test/fts5corrupt3.test @@ -51,6 +51,7 @@ do_test 1.1 { set {} {} } {} +sqlite3_db_config db DEFENSIVE 0 for {set i 0} {$i < $L} {incr i} { do_test 1.2.$i { catchsql { @@ -86,6 +87,7 @@ do_execsql_test 2.2 { # reset_db do_test 3.0 { create_t1 } {} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 3.1 { SELECT count(*) FROM t1_data; @@ -158,6 +160,7 @@ do_3_test 3.10 # Test that segments that end unexpectedly are identified as corruption. # reset_db +sqlite3_db_config db DEFENSIVE 0 do_test 4.0 { execsql { CREATE VIRTUAL TABLE t1 USING fts5(x); @@ -182,6 +185,7 @@ for {set i 1} {1} {incr i} { db close sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { BEGIN; @@ -257,6 +261,7 @@ foreach rowid [db eval {SELECT rowid FROM x1_data WHERE rowid>100}] { #------------------------------------------------------------------------ # reset_db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 6.1.0 { CREATE VIRTUAL TABLE t1 USING fts5(a); INSERT INTO t1 VALUES('bbbbb ccccc'); @@ -273,6 +278,7 @@ do_catchsql_test 6.1.2 { #------- reset_db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 6.2.0 { CREATE VIRTUAL TABLE t1 USING fts5(a); INSERT INTO t1(t1, rank) VALUES('pgsz', 32); @@ -288,6 +294,7 @@ do_catchsql_test 6.2.2 { #------- reset_db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 6.3.0 { CREATE VIRTUAL TABLE t1 USING fts5(a); INSERT INTO t1 VALUES('abc abcdef abcdefghi'); @@ -362,6 +369,7 @@ do_test 7.0 { } } {} +sqlite3_db_config db DEFENSIVE 0 do_test 7.1 { foreach i [db eval { SELECT rowid FROM t5_data WHERE rowid>100 }] { db eval BEGIN @@ -383,6 +391,7 @@ do_execsql_test 8.1 { INSERT INTO t1 VALUES('one', 'two'); } +sqlite3_db_config db DEFENSIVE 0 do_test 9.1.1 { set blob "12345678" ;# cookie append blob "0105" ;# 1 level, total of 5 segments diff --git a/ext/fts5/test/fts5integrity.test b/ext/fts5/test/fts5integrity.test index a38b16461c..25c7277305 100644 --- a/ext/fts5/test/fts5integrity.test +++ b/ext/fts5/test/fts5integrity.test @@ -71,6 +71,7 @@ do_execsql_test 4.1 { INSERT INTO aa(aa) VALUES('integrity-check'); } +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test 4.2 { BEGIN; UPDATE aa_docsize SET sz = X'44' WHERE rowid = 3; diff --git a/ext/fts5/test/fts5rebuild.test b/ext/fts5/test/fts5rebuild.test index 01918310f7..eb03279997 100644 --- a/ext/fts5/test/fts5rebuild.test +++ b/ext/fts5/test/fts5rebuild.test @@ -39,9 +39,11 @@ do_execsql_test 1.4 { INSERT INTO f1(f1) VALUES('integrity-check'); } {} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.5 { DELETE FROM f1_data; } {} +sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 1.6 { INSERT INTO f1(f1) VALUES('integrity-check'); diff --git a/ext/fts5/test/fts5rowid.test b/ext/fts5/test/fts5rowid.test index e7fd1bc2c5..79064e55ae 100644 --- a/ext/fts5/test/fts5rowid.test +++ b/ext/fts5/test/fts5rowid.test @@ -70,10 +70,12 @@ set res [db one {SELECT count(*) FROM x1_data}] do_execsql_test 2.3 { SELECT count(fts5_decode(rowid, block)) FROM x1_data; } $res +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 2.4 { UPDATE x1_data SET block = X''; SELECT count(fts5_decode(rowid, block)) FROM x1_data; } $res +sqlite3_db_config db DEFENSIVE 1 do_execsql_test 2.5 { INSERT INTO x1(x1, rank) VALUES('pgsz', 1024); diff --git a/ext/fts5/test/fts5version.test b/ext/fts5/test/fts5version.test index 58cd3488b7..60ec81c03d 100644 --- a/ext/fts5/test/fts5version.test +++ b/ext/fts5/test/fts5version.test @@ -36,9 +36,10 @@ do_execsql_test 1.3 { SELECT rowid FROM t1 WHERE t1 MATCH 'a'; } {1} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.4 { UPDATE t1_config set v=5 WHERE k='version'; -} +} do_test 1.5 { db close @@ -53,6 +54,7 @@ do_test 1.6 { } {1 {invalid fts5 file format (found 5, expected 4) - run 'rebuild'}} do_test 1.7 { + sqlite3_db_config db DEFENSIVE 0 execsql { DELETE FROM t1_config WHERE k='version' } db close sqlite3 db test.db diff --git a/ext/fts5/test/fts5vocab.test b/ext/fts5/test/fts5vocab.test index 8c40316085..d3c8b760d7 100644 --- a/ext/fts5/test/fts5vocab.test +++ b/ext/fts5/test/fts5vocab.test @@ -420,6 +420,7 @@ if {[detail_is_none]} { set resc [row_to_col $resr] } do_execsql_test 8.1.1 { SELECT * FROM x1_r; } $resr do_execsql_test 8.1.2 { SELECT * FROM x1_c } $resc +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 8.2 { PRAGMA writable_schema = 1; UPDATE sqlite_master @@ -481,4 +482,3 @@ do_test 9.6 { finish_test - diff --git a/ext/rtree/rtree8.test b/ext/rtree/rtree8.test index 68b68c45fd..66e0de0d00 100644 --- a/ext/rtree/rtree8.test +++ b/ext/rtree/rtree8.test @@ -101,7 +101,9 @@ do_test rtree8-1.3.5 { # populate_t1 50 do_execsql_test rtree8-2.1.1 { SELECT max(nodeno) FROM t1_node } {5} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test rtree8-2.1.2 { DELETE FROM t1_node } {} +sqlite3_db_config db DEFENSIVE 1 for {set i 1} {$i <= 50} {incr i} { do_catchsql_test rtree8-2.1.3.$i { SELECT * FROM t1 WHERE id = $i @@ -121,9 +123,11 @@ do_execsql_test rtree8-2.1.6 { populate_t1 50 +sqlite3_db_config db DEFENSIVE 0 do_execsql_test rtree8-2.2.1 { DELETE FROM t1_parent } {} +sqlite3_db_config db DEFENSIVE 1 do_catchsql_test rtree8-2.2.2 { DELETE FROM t1 WHERE id=25 } {1 {database disk image is malformed}} diff --git a/ext/rtree/rtreeA.test b/ext/rtree/rtreeA.test index 190d7d7532..8344863df0 100644 --- a/ext/rtree/rtreeA.test +++ b/ext/rtree/rtreeA.test @@ -36,6 +36,7 @@ proc populate_t1 {} { execsql { INSERT INTO t1 VALUES($i, $i, $x2, $i, $y2) } } execsql COMMIT + sqlite3_db_config db DEFENSIVE 0 } proc truncate_node {nodeno nTrunc} { @@ -246,6 +247,7 @@ do_execsql_test rtreeA-6.2 { create_t1 populate_t1 sqlite3 db test.db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test rtreeA-7.100 { UPDATE t1_node SET data=x'' WHERE rowid=1; } {} @@ -258,4 +260,3 @@ do_test rtreeA-7.120 { finish_test - diff --git a/ext/rtree/rtreecheck.test b/ext/rtree/rtreecheck.test index cbe8b513c9..545f4478a9 100644 --- a/ext/rtree/rtreecheck.test +++ b/ext/rtree/rtreecheck.test @@ -61,6 +61,7 @@ proc setup_simple_db {{module rtree}} { INSERT INTO r1 VALUES(4, 8, 8, 8, 8); -- 21 INSERT INTO r1 VALUES(5, 9, 9, 9, 9); -- 27 " + sqlite3_db_config db DEFENSIVE 0 } setup_simple_db @@ -112,6 +113,7 @@ do_execsql_test 3.1 { SELECT rtreecheck('r2') } {ok} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 3.2 { BEGIN; UPDATE r2_node SET data = X'123456'; @@ -140,6 +142,7 @@ do_execsql_test 5.0 { ) INSERT INTO r3 SELECT i, i, i, i, i FROM x; } +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 5.1 { BEGIN; UPDATE r3_node SET data = set_int32(data, 3, 5000); @@ -155,4 +158,3 @@ do_execsql_test 5.2 { } 0 finish_test - diff --git a/manifest b/manifest index 7194b86403..8b6de01a80 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Turn\son\sdefensive\smode\sfor\srunning\stest\sscripts.\s\sDoes\snot\syet\swork. -D 2018-11-06T15:57:59.184 +C Enable\sDEFENSIVE\smode\sby\sdefault\sfor\stests.\s\sThis\srequires\slots\sof\scase\sof\nturning\sDEFENSIVE\soff\sin\sorder\sto\sdodgy\sthings\sto\sthe\sdatabase\sfor\stesting\npurposes.\s\sNo\sall\sof\sthose\scases\sare\syet\shandled,\sso\s"make\stest"\sdoes\snot\srun\nto\scompletion. +D 2018-11-06T19:26:04.536 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -153,9 +153,9 @@ F ext/fts5/test/fts5config.test 60094712debc59286c59aef0e6cf511c37d866802776a825 F ext/fts5/test/fts5conflict.test 655925678e630d3cdf145d18725a558971806416f453ac8410ca8c04d934238d F ext/fts5/test/fts5connect.test b12a2a8b02af3c31c18abbc33aa8100d364de19a888a44457484d21dbccb18a7 F ext/fts5/test/fts5content.test 688d5ac7af194ebc67495daea76a69e3cd5480122c2320e72d41241b423b4116 -F ext/fts5/test/fts5corrupt.test 8957f0f7e57e0f8a102c5b6e1a7326d6a1966b28e1d99c5883822af1e6038e9e -F ext/fts5/test/fts5corrupt2.test 6deaf9f9606b3c957529db9881622bb3a7829b19bb3cdf8f276f074d684ede56 -F ext/fts5/test/fts5corrupt3.test 1b489101212206da1f27d0d03b9667e54571cba72db7e70b195fdf39f867b48c +F ext/fts5/test/fts5corrupt.test 77ae6f41a7eba10620efb921cf7dbe218b0ef232b04519deb43581cb17a57ebe +F ext/fts5/test/fts5corrupt2.test 7453752ba12ce91690c469a6449d412561cc604b1dec994e16ab132952e7805f +F ext/fts5/test/fts5corrupt3.test ff9aee403611461e2619d2217c0d7d101a9c0179277c13c8a89516d7cf0dda43 F ext/fts5/test/fts5delete.test cbf87e3b8867c4d5cfcaed975c7475fd3f99d072bce2075fcedf43d1f82af775 F ext/fts5/test/fts5detail.test 31b240dbf6d44ac3507e2f8b65f29fdc12465ffd531212378c7ce1066766f54e F ext/fts5/test/fts5determin.test 1b77879b2ae818b5b71c859e534ee334dac088b7cf3ff3bf76a2c82b1c788d11 @@ -179,7 +179,7 @@ F ext/fts5/test/fts5first.test 707a591b1b7d893fcfcb2366cbfe56aefab5d9c7cfa58bef3 F ext/fts5/test/fts5full.test 49b565da02918c06e58f51f0b953b0302b96f155aa68baba24782b81570685e2 F ext/fts5/test/fts5fuzz1.test 238d8c45f3b81342aa384de3e581ff2fa330bf922a7b69e484bbc06051a1080e F ext/fts5/test/fts5hash.test a4cf51acad99bfc43c16fb74f9d22495dc221ae0701fc5e908ca963a9b26a02b -F ext/fts5/test/fts5integrity.test 6c4aad7f7380ec459a0c27ebbc0cb314fa67f3a3dad0cc820f612d33aa887166 +F ext/fts5/test/fts5integrity.test 4317561cd25eca7df16aa1f7d1a700ee958059fa639785f94aba0a84df9ab17b F ext/fts5/test/fts5lastrowid.test be98fe3e03235296585b72daad7aed5717ba0062bae5e5c18dd6e04e194c6b28 F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc2782680740513c4d1fc114b43d4ad F ext/fts5/test/fts5matchinfo.test 79129ff6c9a2d86943b287a5a8caa7ee639f6dcf004d8975d15c279374e82e35 @@ -196,9 +196,9 @@ F ext/fts5/test/fts5porter2.test 0d251a673f02fa13ca7f011654873b3add20745f7402f10 F ext/fts5/test/fts5prefix.test a0fa67b06650f2deaa7bf27745899d94e0fb547ad9ecbd08bfad98c04912c056 F ext/fts5/test/fts5query.test ac363b17a442620bb0780e93c24f16a5f963dfe2f23dc85647b869efcfada728 F ext/fts5/test/fts5rank.test beb1adae7b076beea98277f140e713f9713f503866d3ff7286c9805b220dd4a2 -F ext/fts5/test/fts5rebuild.test 6d09fd54b1170a1e54fe17b808bbf17fba3154956cc2f065dd94bf1e3d254f63 +F ext/fts5/test/fts5rebuild.test aa277a56292e0dc936815917e4546792c591a142c7ffb3e73466817901522d7d F ext/fts5/test/fts5restart.test 835ecc8f449e3919f72509ab58056d0cedca40d1fe04108ccf8ac4c2ba41f415 -F ext/fts5/test/fts5rowid.test 365997f5aebd619df3ae46c2a4bfc8edba361899bc4e52cebfba0dbcbf720522 +F ext/fts5/test/fts5rowid.test e2ffedefb04c8fb1e954ddb55839094608c4967379eb8a508fd2249e1ae079f9 F ext/fts5/test/fts5simple.test 313ad28ef38ebe25f0a1673dd18f2fac446e25feb15bbb0c223a65ea00594f72 F ext/fts5/test/fts5simple2.test 258a1b0c590409bfa5271e872c79572b319d2a56554d0585f68f146a0da603f0 F ext/fts5/test/fts5simple3.test d5c74a9d3ca71bd5dd5cacb7c55b86ea12cdddfc8b1910e3de2995206898380f @@ -213,8 +213,8 @@ F ext/fts5/test/fts5unicode3.test c3caecbe8264629ffe653b43ca5790b9793eba4422f922 F ext/fts5/test/fts5unicode4.test 6463301d669f963c83988017aa354108be0b947d325aef58d3abddf27147b687 F ext/fts5/test/fts5unindexed.test 9021af86a0fb9fc616f7a69a996db0116e7936d0db63892db6bafabbec21af4d F ext/fts5/test/fts5update.test 0737876e20e97a6a6abf45de19fc99315727bcee6a83fadcada1cc080b9aa8f0 -F ext/fts5/test/fts5version.test 99b81372630fbf359107c96580fa761e41cdfb1dafc9966e148629ca72efee71 -F ext/fts5/test/fts5vocab.test 2ba98bcef0fcab3e5fead8eaabd6c0efb7e57bfe707a5cfcc18572ca9b277360 +F ext/fts5/test/fts5version.test c8f2cc105f0abf0224965f93e584633dee3e06c91478bc67e468f7cfdf97fd6a +F ext/fts5/test/fts5vocab.test 2de834ee6405130d3373817ced8fefbfee392b63d932e471740e09829f1e4510 F ext/fts5/test/fts5vocab2.test 2beeec974a305a1d79b91426622cc922c87065874437d22b400de7438979959e F ext/fts5/tool/fts5speed.tcl b0056f91a55b2d1a3684ec05729de92b042e2f85 F ext/fts5/tool/fts5txt2db.tcl 526a9979c963f1c54fd50976a05a502e533a4c59 @@ -371,9 +371,9 @@ F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd F ext/rtree/rtree5.test 49c9041d713d54560b315c2c7ef7207ee287eba1b20f8266968a06f2e55d3142 F ext/rtree/rtree6.test 593e0d36510d5ac1d1fb39b018274ff17604fe8fdca8cf1f8e16559cea1477f4 F ext/rtree/rtree7.test c8fb2e555b128dd0f0bdb520c61380014f497f8a23c40f2e820acc9f9e4fdce5 -F ext/rtree/rtree8.test 924926d7c64ac59fcca0809de472d9dd73c612f54daae1cf992bdd7dac90305b +F ext/rtree/rtree8.test 9428c213f1bd52d77ef8772ceca1989993134acae315354c043645b694be7854 F ext/rtree/rtree9.test c646f12c8c1c68ef015c6c043d86a0c42488e2e68ed1bb1b0771a7ca246cbabf -F ext/rtree/rtreeA.test 20623ca337ca3bd7e008cc9fb49e44dbe97f1a80b238e10a12bb4afcd0da3776 +F ext/rtree/rtreeA.test ed2f1be9c06dde0b1ab93a95dd9e87eeaa02db2d30bcb4b9179b69ee3dc3319b F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9 F ext/rtree/rtreeC.test 128928549d22b65c381ab1366760d08703cd75e34f6a7a506ece38f9330b7282 F ext/rtree/rtreeD.test fe46aa7f012e137bd58294409b16c0d43976c3bb92c8f710481e577c4a1100dc @@ -383,7 +383,7 @@ F ext/rtree/rtreeG.test 1b9ca6e3effb48f4161edaa463ddeaa8fca4b2526d084f9cbf5dbe4e F ext/rtree/rtreeH.test aa08cc4fa8005b4c67446c7110205055b4d6da90e760e6f44b82dfa4cdf8d87a F ext/rtree/rtree_perf.tcl 6c18c1f23cd48e0f948930c98dfdd37dfccb5195 F ext/rtree/rtree_util.tcl db734b4c5e75fed6acc56d9701f2235345acfdec750b5fc7b587936f5f6bceed -F ext/rtree/rtreecheck.test 4d29103d1e16fcbf90135d1c637b833688492b063b2971dfb5dc6ba76555cfee +F ext/rtree/rtreecheck.test d67d5b3e9e45bfa8cd90734e8e9302144ac415b8e9176c6f02d4f92892ee8a35 F ext/rtree/rtreeconnect.test 225ad3fcb483d36cbee423a25052a6bbae762c9576ae9268332360c68c170d3d F ext/rtree/sqlite3rtree.h 9c5777af3d2921c7b4ae4954e8e5697502289d28 F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de @@ -455,7 +455,7 @@ F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c cfa87c8a9e3b5267a72faa3a592a497cd3810146c056c53a3472caf763c8556b F src/dbstat.c 9ad3f2d9d19a915d414870b9405b19493eed41975f3ad0d13f70fdd0831853b4 -F src/delete.c d058ed72fc9b975dbf42fd8bdacbb530106440595847dc8aba6bb1d138ca2c5f +F src/delete.c 36825ff2d6d4026f4cde42dd0642bfc8aeacc7596330d0159683d66cca715a1e F src/expr.c 9aacc0b72348ba90010b672dcbbbe2fa56e1182043bc917a3a147b2bc57a5497 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 @@ -574,7 +574,7 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c 36e7d21a20c0bf6ef4ef7c399d192b5239410b7c4d3c1070fba4e30810d0b855 +F src/vacuum.c 836cadc922de866c849e23a75f93d344cdc143d388339305d09a3fed27e8798d F src/vdbe.c 005e691ea4c7d51e6c1a69d9389aeb34700884c85f51681817ddea3fdc2fc39b F src/vdbe.h 5081dcc497777efe5e9ebe7330d283a044a005e4bdda2e2e984f03bf89a0d907 F src/vdbeInt.h 8a52b8db3d20f9755a965d864b8653052c7ef1ccadceb2e057047cd421f6336e @@ -727,7 +727,7 @@ F test/conflict2.test bb0b94cf7196c64a3cbd815c66d3ee98c2fecd9c F test/conflict3.test a83db76a6c3503b2fa057c7bfb08c318d8a422202d8bc5b86226e078e5b49ff9 F test/contrib01.test 2a1cbc0f2f48955d7d073f725765da6fbceda6b4 F test/corrupt.test 141c39ea650c1365e85a49e402fa05cb9617fb97 -F test/corrupt2.test fdfdffab9bc37d6d173f56ffb82472206f11dd4a68caad9360ac4db2eddb34c8 +F test/corrupt2.test a7f95356d19a4e8bf9423622ad865cabf48ae49dad40eb7a17a0b39f1cdd6948 F test/corrupt3.test f95d7bf78109e0b84eb285a787ce91a3fd6a2dd7d0cb55882abff3bdc081a57e F test/corrupt4.test 8d1d86b850fcc43e417450454f2044e52d55778a F test/corrupt5.test 8ead52af76006f3286e9396cb41898018ccea107 @@ -895,21 +895,21 @@ F test/fts3am.test 218aa6ba0dfc50c7c16b2022aac5c6be593d08d8 F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18 F test/fts3ao.test 266989148fec6d9f1bb6c5382f7aa3dcea0e9cd444576e28dd2b9287ac7dd220 F test/fts3atoken.test 4b4c16fdcfc972f2cdbba212375a060a86ccf5f1 -F test/fts3auto.test b981fea19b132b4e6878f50d7c1f369b28f68eb9 +F test/fts3auto.test 4eeb2a2e4f4533b94077beb8ef60c2fc82821b17a818f488f7a3decb7d328220 F test/fts3aux1.test 7a170e172afdbceb67f5baa05941fd4fbf56af42f61daa3d140f4b4bf4cb68f6 F test/fts3aux2.test 7ae2b2c13aefdf4169279a27a5f51780ce57f6ba F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491 F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958 F test/fts3comp1.test a0f5b16a2df44dd0b15751787130af2183167c0c F test/fts3conf.test c84bbaec81281c1788aa545ac6e78a6bd6cde2bdbbce2da261690e3659f5a76b -F test/fts3corrupt.test 2710b77983cc7789295ddbffea52c1d3b7506dbb -F test/fts3corrupt2.test 6d96efae2f8a6af3eeaf283aba437e6d0e5447ba -F test/fts3corrupt3.test 56e0ee83e90b57f5f3644cb7d1b36a067b7b8b19cdf0dedce45e5e13cf752f65 -F test/fts3corrupt4.test 98022cbacbd6ddc4708f210768f5684f041f50ce330c461f2631752492611d96 -F test/fts3cov.test 9c3681325b9a850bca8dd75cc29dde73e9a87972bb75204e97d826f13c7181f9 -F test/fts3d.test d3e9c8fb75135ada06bf3bab4f9666224965d708 -F test/fts3defer.test 0be4440b73a2e651fc1e472066686d6ada4b9963 -F test/fts3defer2.test c540f5f5c2840f70c68fd9b597df817ec7170468 +F test/fts3corrupt.test 46b9ddda7f6588fd5a5b1f4bb4fc0618dc45010e7dddb8a3a188baf3197177ae +F test/fts3corrupt2.test bf55c3fa0b0dc8ea1c0fe5543623bd27714585da6a129038fd6999fe3b0d25f3 +F test/fts3corrupt3.test 0d5b69a0998b4adf868cc301fc78f3d0707745f1d984ce044c205cdb764b491f +F test/fts3corrupt4.test a27259f4f25d60b4eca481d050b3cfee97eddb0d937d38f231408c5239066e11 +F test/fts3cov.test 95a6e1b3415dec831522419b351c323ac5b1df668eade1477a66161320a24e6d +F test/fts3d.test 34ca835cfb87635a3b65aaf67c8798b632c4046cbb1813d31d89740b59d0263d +F test/fts3defer.test 88873590700e0cd4e56e66f6024b96a37b12091a7afc892b092a980acd75f94a +F test/fts3defer2.test 9f70672efde9648ce8cf20f360390e0cb225ca95b00fff06b829f168eeb9dc28 F test/fts3defer3.test dd53fc13223c6d8264a98244e9b19abd35ed71cd F test/fts3drop.test 1b906e293d6773812587b3dc458cb9e8f3f0c297 F test/fts3e.test 1f6c6ac9cc8b772ca256e6b22aaeed50c9350851 @@ -923,37 +923,37 @@ F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f943 F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641 F test/fts3join.test 949b4f5ae3ae9cc2423cb865d711e32476bdb205ab2be923fdf48246e4a44166 F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6 -F test/fts3matchinfo.test ce864e0bd92429df8008f31cf557269ba172482a -F test/fts3misc.test ba03a83b831555cfd18c6c862b24b70a53ce7497fe55077f7c4b7c9ce83c2eed +F test/fts3matchinfo.test 1d012ac55861fa19c02d36ae7ad02d568bd110d924a8779469ef6d7e7856974f +F test/fts3misc.test 0b20083efab36a42804bf8017a003f72f963c46163403dae7256493367d2f9d3 F test/fts3near.test 7e3354d46f155a822b59c0e957fd2a70c1d7e905 F test/fts3offsets.test b85fd382abdc78ebce721d8117bd552dfb75094c F test/fts3prefix.test fa794eaab0bdae466494947b0b153d7844478ab2 F test/fts3prefix2.test e1f0a822ca661dced7f12ce392e14eaf65609dce -F test/fts3query.test ca5dffabdfe9aef2ebcc89e02ce515898f86f8c30a365283831c53e0e08e5821 +F test/fts3query.test b911e997a4fdb188a921ebdeb7bdbce445b7382c934d76fae8b29aef457900c0 F test/fts3rank.test cd99bc83a3c923c8d52afd90d86979cf05fc41849f892faeac3988055ef37b99 F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0 F test/fts3shared.test 57e26a801f21027b7530da77db54286a6fe4997e -F test/fts3snippet.test 01a4231816e03a0660ae53ba2404fe69012fe0db +F test/fts3snippet.test 1758244263b92ec56a2447f7362906a5baf0ee5406d84b9669fb22655324012b F test/fts3sort.test ed34c716a11cc2009a35210e84ad5f9c102362ca F test/fts3tok1.test a663f4cac22a9505400bc22aacb818d7055240409c28729669ea7d4cc2120d15 F test/fts3tok_err.test 52273cd193b9036282f7bacb43da78c6be87418d F test/fts3varint.test 752c08ed5d32c5d7dc211b056f4ed68a76b7e36e F test/fts4aa.test 10aac8e9d62c7357590acfabe3fad01e9a9ce1cb -F test/fts4check.test c3056eab9524232e4c9bdcd119912947e07bcc1c +F test/fts4check.test 28e593f65e7fe788c929ea5ddd04db827c3fd74dd47af1d08aceee226d1e9e88 F test/fts4content.test 1518195a9f92b711d94419f76409a31cc78755854fb0abb1da2b74b9e0cf843e F test/fts4docid.test e33c383cfbdff0284685604d256f347a18fdbf01 -F test/fts4growth.test e5390da74619cacc389711bac9349640b32c4f9a +F test/fts4growth.test 289833c34ad45a5e6e6133b53b6a71647231fb89d36ddcb8d9c87211b6721d7f F test/fts4growth2.test 13ad4e76451af6e6906c95cdc725d01b00044269 F test/fts4incr.test 4e353a0bd886ea984e56fce9e77724fc923b8d0d F test/fts4langid.test 2168ba330af34f8a1c8832de0aab4c4b6fa195a16419c9c0c8aad59ceb6ff714 F test/fts4lastrowid.test 185835895948d5325c7710649824042373b2203149abe8024a9319d25234dfd7 -F test/fts4merge.test 10b55f410fade8691a455210b0b9302ef178a4f06fba0ad1941801caab82f5a9 +F test/fts4merge.test 970d20bb089985a075a8b39017a6cc3a7156fa8331db409cb70498c573352f90 F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891 F test/fts4merge3.test 8d9ccb4a3d41c4c617a149d6c4b13ad02de797d0 F test/fts4merge4.test d895b1057a7798b67e03455d0fa50e9ea836c47b F test/fts4noti.test 5553d7bb2e20bf4a06b23e849352efc022ce6309 F test/fts4onepass.test d69ddc4ee3415e40b0c5d1d0408488a87614d4f63ba9c44f3e52db541d6b7cc7 -F test/fts4opt.test fd6a11684b965e1999564ae763797b7fb9e34c96 +F test/fts4opt.test f67e6a6da9f3290949c2ad07faca73caf6ba23c006afbfa37e8d6d1acd988c62 F test/fts4unicode.test ceca76422abc251818cb25dabe33d3c3970da5f7c90e1540f190824e6b3a7c95 F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d F test/func.test 09dda479bcfc568f99f3070413e9672a8eeedc1be9c5d819bf55d4788c2583b7 @@ -1352,7 +1352,7 @@ F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30 F test/temptable2.test d2940417496e2b9548e01d09990763fbe88c316504033256d51493e1f1a5ce6a F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc -F test/tester.tcl 9a4c02c89fec21b7fb2082143595ea64289289a23b30483733348bb17c1ae4a1 +F test/tester.tcl be183110f88b2b18eb1d1c2ee4ffbc355cebdd89fa5e9953e7d5182db8638991 F test/thread001.test b61a29dd87cf669f5f6ac96124a7c97d71b0c80d9012746072055877055cf9ef F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d890c6582524677666e6f5b5817331dec332ade16b2f744cbb8a3c7dd9b63e21 -R e9f4d27ca7b2f873c7fcee04be6300fd +P 1c1d24edbb732f2a2002a741c7a7afdd010b67e1b5e6d90ff36c6428897e7612 +R a090d326d91e2064f2a8ccd8efbcd9e3 U drh -Z 9fe44fcd11ea00f63b017a2647f9f482 +Z c4bb3ba9c94194a36c5c09b3778b92b6 diff --git a/manifest.uuid b/manifest.uuid index e9abd7bc87..5b096513f2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1c1d24edbb732f2a2002a741c7a7afdd010b67e1b5e6d90ff36c6428897e7612 \ No newline at end of file +a1d6c6712c3304fd736077432c8c180692cf7d79be7f3a073510b6dab0eb951f \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index 9380a0915e..7007de375b 100644 --- a/src/delete.c +++ b/src/delete.c @@ -71,7 +71,8 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ && pParse->nested==0) || ( (pTab->tabFlags & TF_Shadow)!=0 && (db->flags & SQLITE_Defensive)!=0 - && db->nVdbeExec==0) + && db->nVdbeExec==0 + && db->pVtabCtx==0) ){ sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); return 1; diff --git a/src/vacuum.c b/src/vacuum.c index 04ad5e7a3a..5fb048916b 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -166,7 +166,8 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ saved_mTrace = db->mTrace; db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks; db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum; - db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_CountRows); + db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder + | SQLITE_Defensive | SQLITE_CountRows); db->mTrace = 0; zDbMain = db->aDb[iDb].zDbSName; diff --git a/test/corrupt2.test b/test/corrupt2.test index 9512d0f242..eee7ed322c 100644 --- a/test/corrupt2.test +++ b/test/corrupt2.test @@ -133,6 +133,7 @@ do_test corrupt2-2.1 { forcecopy test.db corrupt.db sqlite3 db2 corrupt.db + sqlite3_db_config db2 DEFENSIVE 0 execsql " $::presql CREATE INDEX a1 ON abc(a); @@ -265,6 +266,7 @@ proc corruption_test {args} { forcedelete corrupt.db-journal sqlite3 db corrupt.db + sqlite3_db_config db DEFENSIVE 0 db eval $::presql eval $A(-tclprep) db eval $A(-sqlprep) diff --git a/test/fts3auto.test b/test/fts3auto.test index 20640d29ac..f2378ded36 100644 --- a/test/fts3auto.test +++ b/test/fts3auto.test @@ -134,11 +134,13 @@ proc fts3_make_deferrable {tbl token {nRow 0}} { # fts3_zero_long_segments TABLE ?LIMIT? # proc fts3_zero_long_segments {tbl limit} { + sqlite3_db_config db DEFENSIVE 0 execsql " UPDATE ${tbl}_segments SET block = zeroblob(length(block)) WHERE length(block)>$limit " + sqlite3_db_config db DEFENSIVE 1 return [db changes] } diff --git a/test/fts3corrupt.test b/test/fts3corrupt.test index cb50e3e46a..664b1393b8 100644 --- a/test/fts3corrupt.test +++ b/test/fts3corrupt.test @@ -23,6 +23,7 @@ set ::testprefix fts3corrupt # extends past the end of the node on which it resides is correctly identified # as database corruption. # +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.0 { CREATE VIRTUAL TABLE t1 USING fts3; INSERT INTO t1 VALUES('hello'); diff --git a/test/fts3corrupt2.test b/test/fts3corrupt2.test index 78c76778f5..40783facf9 100644 --- a/test/fts3corrupt2.test +++ b/test/fts3corrupt2.test @@ -49,6 +49,7 @@ lappend data {*}{ "acvmldguld asdvz aqb aeomsyzyu aggylhprbdz asrfkwz auipybpsn agsnszzfb" } +sqlite3_db_config db DEFENSIVE 0 do_test fts3corrupt2-1.0 { execsql BEGIN execsql { CREATE VIRTUAL TABLE t2 USING FTS3(a, b); } diff --git a/test/fts3corrupt3.test b/test/fts3corrupt3.test index 6c846e9bae..eae13f222b 100644 --- a/test/fts3corrupt3.test +++ b/test/fts3corrupt3.test @@ -33,6 +33,7 @@ do_execsql_test 1.0 { do_execsql_test 1.1 { SELECT quote(root) from t1_segdir; } {X'00036F6E6509010200010200010200'} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.2 { UPDATE t1_segdir SET root = X'00036F6E650EFFFFFFFFFFFFFFFFFFFFFFFF0200'; } diff --git a/test/fts3corrupt4.test b/test/fts3corrupt4.test index 52c3d8caf4..5e9e458134 100644 --- a/test/fts3corrupt4.test +++ b/test/fts3corrupt4.test @@ -40,6 +40,7 @@ do_execsql_test 1.1 { SELECT quote(root) FROM ft_segdir; } {X'0005616261636B03010200030266740302020003046E646F6E03030200'} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.2 { UPDATE ft_segdir SET root = blob( '0005616261636B03010200 FFFFFFFF0702 66740302020003046E646F6E03030200' @@ -83,6 +84,7 @@ do_execsql_test 2.2 { } {X'00056162633130031F0200'} db func blob blob +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 2.3.1 { UPDATE ft_segments SET block = blob('00056162633130031F0200 FFFFFFFF07FF55 66740302020003046E646F6E03030200') @@ -133,6 +135,7 @@ do_execsql_test 3.1 { } {X'0101056162633132040136030132030136'} db func blob blob +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 3.2 { UPDATE ft_segdir SET root = blob('0101056162633132FFFFFFFF070236030132030136'); @@ -143,5 +146,3 @@ do_catchsql_test 3.1 { } {1 {database disk image is malformed}} finish_test - - diff --git a/test/fts3cov.test b/test/fts3cov.test index 817679d0a4..735d501679 100644 --- a/test/fts3cov.test +++ b/test/fts3cov.test @@ -89,6 +89,7 @@ do_test fts3cov-2.1 { } {03} # Test the "missing entry" case: +sqlite3_db_config db DEFENSIVE 0 do_test fts3cov-2.2 { set root [db one {SELECT root FROM t1_segdir}] read_fts3varint [string range $root 1 end] left_child @@ -102,6 +103,7 @@ do_error_test fts3cov-2.3 { do_test fts3cov-2.4 { execsql { INSERT INTO t1_segments VALUES($left_child, NULL) } } {} +sqlite3_db_config db DEFENSIVE 1 do_error_test fts3cov-2.5 { SELECT * FROM t1 WHERE t1 MATCH 'cloud' } {SQL logic error} @@ -405,6 +407,7 @@ do_execsql_test 15.1 { # Test a corruption case. # +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 16.1 { CREATE VIRTUAL TABLE t16 USING fts4; INSERT INTO t16 VALUES('theoretical work to examine the relationship'); diff --git a/test/fts3d.test b/test/fts3d.test index 83af4d2a37..4ba5488865 100644 --- a/test/fts3d.test +++ b/test/fts3d.test @@ -296,6 +296,7 @@ do_test fts3d-5.0 { } {{Index already optimal} 1 0} # Even if we move things around, still does nothing. +sqlite3_db_config db DEFENSIVE 0 do_test fts3d-5.1 { execsql { UPDATE t1_segdir SET level = 2 WHERE level = 1 AND idx = 0; @@ -303,6 +304,7 @@ do_test fts3d-5.1 { SELECT level, idx FROM t1_segdir ORDER BY level, idx; } } {{Index already optimal} 2 0} +sqlite3_db_config db DEFENSIVE 1 # ALTER TABLE RENAME should work regardless of the database encoding. diff --git a/test/fts3defer.test b/test/fts3defer.test index 532d4dfa6a..fb54c48b35 100644 --- a/test/fts3defer.test +++ b/test/fts3defer.test @@ -59,12 +59,14 @@ set tests { do_select_tests 1.2 $tests +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.3 { SELECT count(*) FROM t1_segments WHERE length(block)>10000; UPDATE t1_segments SET block = zeroblob(length(block)) WHERE length(block)>10000; } {1} +sqlite3_db_config db DEFENSIVE 1 do_select_tests 1.4 $tests @@ -225,7 +227,9 @@ foreach {tn setup} { execsql { CREATE VIRTUAL TABLE t1 USING FTS4 } foreach doc $data { execsql { INSERT INTO t1 VALUES($doc) } } add_empty_records 1000 + sqlite3_db_config db DEFENSIVE 0 execsql $zero_long_doclists + sqlite3_db_config db DEFENSIVE 1 } 4 { set dmt_modes 0 @@ -233,14 +237,18 @@ foreach {tn setup} { foreach doc $data { execsql { INSERT INTO t1 VALUES($doc) } } add_empty_records 1000 execsql "INSERT INTO t1(t1) VALUES('optimize')" + sqlite3_db_config db DEFENSIVE 0 execsql $zero_long_doclists + sqlite3_db_config db DEFENSIVE 1 } 5 { set dmt_modes 0 execsql { CREATE VIRTUAL TABLE t1 USING FTS4(matchinfo=fts3) } foreach doc $data { execsql { INSERT INTO t1 VALUES($doc) } } add_empty_records 1000 + sqlite3_db_config db DEFENSIVE 0 execsql $zero_long_doclists + sqlite3_db_config db DEFENSIVE 1 } } { diff --git a/test/fts3defer2.test b/test/fts3defer2.test index 275e0f0eb3..b3f808dea8 100644 --- a/test/fts3defer2.test +++ b/test/fts3defer2.test @@ -46,10 +46,12 @@ do_execsql_test 1.1.4 { INSERT INTO t1 VALUES(''); INSERT INTO t1(t1) VALUES('optimize'); } +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.1.4 { SELECT count(*) FROM t1_segments WHERE length(block)>10000; UPDATE t1_segments SET block = zeroblob(length(block)) WHERE length(block)>10000; } {2} +sqlite3_db_config db DEFENSIVE 1 do_execsql_test 1.2.0 { SELECT content FROM t1 WHERE t1 MATCH 'f (e a)'; @@ -98,7 +100,9 @@ foreach {tn sql} { WHERE length(block)>10000; } } { + sqlite3_db_config db DEFENSIVE 0 execsql $sql + sqlite3_db_config db DEFENSIVE 1 do_execsql_test 2.2.$tn.1 { SELECT mit(matchinfo(t2, 'pcxnal')) FROM t2 WHERE t2 MATCH 'a b'; @@ -152,7 +156,9 @@ foreach {tn sql} { WHERE length(block)>10000; } } { + sqlite3_db_config db DEFENSIVE 0 execsql $sql + sqlite3_db_config db DEFENSIVE 1 do_execsql_test 2.4.$tn { SELECT docid, mit(matchinfo(t3, 'pcxnal')) FROM t3 WHERE t3 MATCH '"a b c"'; } {1 {1 1 1 4 4 11 912 6} 3 {1 1 1 4 4 11 912 6}} diff --git a/test/fts3matchinfo.test b/test/fts3matchinfo.test index 8cbcd69041..416a53f626 100644 --- a/test/fts3matchinfo.test +++ b/test/fts3matchinfo.test @@ -278,11 +278,13 @@ do_matchinfo_test 4.3.6 t5 {t5 MATCH 'a OR b'} { s {1 2 1 1} } do_execsql_test 4.4.0.1 { INSERT INTO t5(t5) VALUES('optimize') } ifcapable fts4_deferred { + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 4.4.0.2 { UPDATE t5_segments SET block = zeroblob(length(block)) WHERE length(block)>10000; } + sqlite3_db_config db DEFENSIVE 1 } do_matchinfo_test 4.4.2 t5 {t5 MATCH 'a b'} { s {2} } @@ -339,10 +341,12 @@ do_execsql_test 6.1 { SELECT offsets(t9) FROM t9 WHERE t9 MATCH 'to'; } {{0 0 20 2 0 0 27 2}} +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test 6.2 { UPDATE t9_content SET c0content = 'this record is used to'; SELECT offsets(t9) FROM t9 WHERE t9 MATCH 'to'; } {1 {database disk image is malformed}} +sqlite3_db_config db DEFENSIVE 1 #------------------------------------------------------------------------- # Test the outcome of matchinfo() when used within a query that does not @@ -392,6 +396,7 @@ do_execsql_test 8.3 { } {{204 1 3 3 0} {204 1 3 3 0} {204 1 3 3 0}} # Corruption related tests. +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 8.4.1.1 { UPDATE t11_stat SET value = X'0000'; } do_catchsql_test 8.5.1.2 { SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' @@ -406,6 +411,7 @@ do_execsql_test 8.4.3.1 { UPDATE t11_stat SET value = NULL; } do_catchsql_test 8.5.3.2 { SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' } {1 {database disk image is malformed}} +sqlite3_db_config db DEFENSIVE 1 #------------------------------------------------------------------------- do_execsql_test 8.1 { diff --git a/test/fts3misc.test b/test/fts3misc.test index 80204726c2..60126dd6b4 100644 --- a/test/fts3misc.test +++ b/test/fts3misc.test @@ -160,6 +160,7 @@ ifcapable fts4_deferred { do_execsql_test 4.2 { SELECT quote(value) from t4_stat where id=0 } {X'C03EC0B204C0A608'} + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 4.3 { UPDATE t4_stat SET value = X'C03EC0B204C0A60800' WHERE id=0; } diff --git a/test/fts3query.test b/test/fts3query.test index bc25699e12..13072dd860 100644 --- a/test/fts3query.test +++ b/test/fts3query.test @@ -167,7 +167,9 @@ do_select_tests 5.3 -errorformat { 3 "SELECT snippet(content) FROM t2 WHERE t2 MATCH 'history'" snippet 4 "SELECT optimize(content) FROM t2 WHERE t2 MATCH 'history'" optimize } +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 5.4.0 { UPDATE t2_content SET c0content = X'1234' } +sqlite3_db_config db DEFENSIVE 1 do_select_tests 5.4 -errorformat { illegal first argument to %s } { diff --git a/test/fts3snippet.test b/test/fts3snippet.test index 887011cd11..ff66ec6fcc 100644 --- a/test/fts3snippet.test +++ b/test/fts3snippet.test @@ -184,7 +184,9 @@ foreach {DO_MALLOC_TEST enc} { [list 0 0 $off 10 1 0 $off 10] [list 0 0 $off 10] # Test a corruption case: + sqlite3_db_config db DEFENSIVE 0 execsql { UPDATE ft_content SET c1b = 'hello world' WHERE c1b = $numbers } + sqlite3_db_config db DEFENSIVE 1 do_error_test $T.2.3 { SELECT offsets(ft) FROM ft WHERE ft MATCH 'onehundred' } {database disk image is malformed} diff --git a/test/fts4check.test b/test/fts4check.test index 1e2f6b234f..49d1f00d8b 100644 --- a/test/fts4check.test +++ b/test/fts4check.test @@ -66,7 +66,9 @@ foreach {tn disruption} { ); } } { + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.2.1.$tn "BEGIN; $disruption" + sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 1.2.2.$tn { INSERT INTO t1 (t1) VALUES('integrity-check') } {1 {database disk image is malformed}} @@ -100,7 +102,9 @@ foreach {tn disruption} { ); } } { + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 2.2.1.$tn "BEGIN; $disruption" + sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 2.2.2.$tn { INSERT INTO t2 (t2) VALUES('integrity-check') } {1 {database disk image is malformed}} @@ -145,7 +149,9 @@ foreach {tn disruption} { ) } } { + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 3.2.1.$tn "BEGIN; $disruption" + sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 3.2.2.$tn { INSERT INTO t3 (t3) VALUES('integrity-check') } {1 {database disk image is malformed}} @@ -163,6 +169,7 @@ do_execsql_test 4.0 { INSERT INTO t4(t4) VALUES('integrity-check'); } +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 4.1 { PRAGMA writable_schema = 1; UPDATE sqlite_master @@ -197,6 +204,7 @@ do_execsql_test 5.1 { INSERT INTO t5(t5) VALUES('integrity-check'); } {} +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test 5.2 { INSERT INTO t5_content VALUES(5, 'his hardy mountain pony'); INSERT INTO t5(t5) VALUES('integrity-check'); diff --git a/test/fts4growth.test b/test/fts4growth.test index 4dc2212464..5cf877747b 100644 --- a/test/fts4growth.test +++ b/test/fts4growth.test @@ -25,6 +25,7 @@ ifcapable !fts3 { source $testdir/genesis.tcl +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.1 { CREATE VIRTUAL TABLE x1 USING fts3; } do_test 1.2 { diff --git a/test/fts4merge.test b/test/fts4merge.test index 63272c41b9..6ea9923201 100644 --- a/test/fts4merge.test +++ b/test/fts4merge.test @@ -156,11 +156,13 @@ foreach mod {fts3 fts4} { SELECT quote(value) FROM t4_stat WHERE rowid=1 } {X'0006'} + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 4.4.2 { DELETE FROM t4_stat WHERE rowid=1; INSERT INTO t4(t4) VALUES('merge=1,12'); SELECT level, group_concat(idx, ' ') FROM t4_segdir GROUP BY level; } "0 {0 1 2 3 4 5} 1 0" + sqlite3_db_config db DEFENSIVE 1 #------------------------------------------------------------------------- diff --git a/test/fts4opt.test b/test/fts4opt.test index 0d0ed9f4f0..3910865d6b 100644 --- a/test/fts4opt.test +++ b/test/fts4opt.test @@ -37,6 +37,7 @@ fts_kjv_genesis # incremental optimize routine. # proc prepare_for_optimize {db tbl} { + sqlite3_db_config $db DEFENSIVE 0 $db eval [string map [list % $tbl] { BEGIN; CREATE TEMP TABLE tmp_segdir( @@ -58,6 +59,7 @@ proc prepare_for_optimize {db tbl} { COMMIT; }] + sqlite3_db_config $db DEFENSIVE 1 } do_test 1.1 { diff --git a/test/tester.tcl b/test/tester.tcl index 97217a8224..f1847e83b9 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -129,6 +129,7 @@ if {[info command sqlite_orig]==""} { set ::dbhandle [lindex $args 0] uplevel #0 $::G(perm:dbconfig) } + sqlite3_db_config [lindex $args 0] DEFENSIVE 1 set res } else { # This command is not opening a new database connection. Pass the @@ -136,7 +137,6 @@ if {[info command sqlite_orig]==""} { # uplevel 1 sqlite_orig $args } - sqlite3_db_config [lindex $args 0] DEFENSIVE 1 } } From 6ab91a7a7aed9e7e1d86e63b7c8cfbfa15a27792 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 7 Nov 2018 02:17:01 +0000 Subject: [PATCH 06/10] Add the SQLITE_DEFAULT_DEFENSIVE compile-time option. Fix up test cases so that they work with DEFENSIVE enabled. FossilOrigin-Name: 3212733cb6d1a59516d67a86df7c7b1d2456a1b2e5d7080c26b0e87b2609c65d --- ext/fts5/test/fts5connect.test | 1 - ext/fts5/test/fts5first.test | 1 - ext/fts5/test/fts5rank.test | 1 - ext/fts5/test/fts5rebuild.test | 1 - ext/fts5/test/fts5rowid.test | 1 - ext/fts5/test/fts5vocab2.test | 1 - ext/rbu/rbu1.test | 1 - ext/rbu/rbu10.test | 1 - ext/rbu/rbu11.test | 1 - ext/rbu/rbu12.test | 1 - ext/rbu/rbu13.test | 1 - ext/rbu/rbu14.test | 1 - ext/rbu/rbu3.test | 2 - ext/rbu/rbu5.test | 4 - ext/rbu/rbu6.test | 1 - ext/rbu/rbu7.test | 2 - ext/rbu/rbu8.test | 1 - ext/rbu/rbu9.test | 1 - ext/rbu/rbuA.test | 1 - ext/rbu/rbuB.test | 1 - ext/rbu/rbuC.test | 1 - ext/rbu/rbucollate.test | 1 - ext/rbu/rbucrash.test | 1 - ext/rbu/rbucrash2.test | 1 - ext/rbu/rbudiff.test | 1 - ext/rbu/rbudor.test | 1 - ext/rbu/rbufault.test | 1 - ext/rbu/rbufault2.test | 1 - ext/rbu/rbufault3.test | 1 - ext/rbu/rbufault4.test | 1 - ext/rbu/rbufts.test | 1 - ext/rbu/rbumulti.test | 1 - ext/rbu/rbuprogress.test | 1 - ext/rbu/rburesume.test | 1 - ext/rbu/rbusave.test | 1 - ext/rbu/rbusplit.test | 1 - ext/rbu/rbutemplimit.test | 1 - ext/rbu/rbuvacuum.test | 1 - ext/rbu/rbuvacuum2.test | 1 - ext/repair/test/checkindex01.test | 2 - ext/rtree/rtree8.test | 2 - ext/session/sessionC.test | 1 - ext/session/sessionD.test | 1 - ext/session/sessionE.test | 2 - ext/session/sessionF.test | 1 - ext/session/sessionG.test | 1 - ext/session/sessionH.test | 1 - ext/session/sessionfault2.test | 1 - ext/session/sessionrebase.test | 1 - ext/session/sessionstat1.test | 1 - ext/session/sessionwor.test | 1 - manifest | 228 +++++++++++++++--------------- manifest.uuid | 2 +- src/main.c | 3 + test/alter2.test | 2 + test/altercol.test | 1 + test/alterlegacy.test | 1 - test/altertab.test | 1 - test/altertab2.test | 1 - test/analyze.test | 1 + test/autoinc.test | 7 + test/bestindex5.test | 1 - test/capi3.test | 2 + test/capi3c.test | 2 + test/corrupt5.test | 1 + test/corruptI.test | 1 + test/corruptK.test | 2 +- test/countofview.test | 1 - test/dbpage.test | 1 + test/e_reindex.test | 2 + test/fts3auto.test | 1 - test/fts3cov.test | 1 - test/fts3d.test | 1 - test/fts3defer.test | 4 - test/fts3defer2.test | 3 - test/fts3matchinfo.test | 3 - test/fts3query.test | 1 - test/fts3snippet.test | 1 - test/fts4check.test | 3 - test/fts4merge.test | 1 - test/fts4opt.test | 1 - test/index.test | 1 - test/index3.test | 1 + test/misc1.test | 3 + test/misc4.test | 1 + test/misc5.test | 1 + test/mjournal.test | 1 - test/notnull.test | 1 - test/pager1.test | 2 + test/parser1.test | 1 + test/pragma.test | 1 + test/resetdb.test | 3 + test/shared8.test | 1 + test/snapshot2.test | 1 - test/snapshot3.test | 1 - test/snapshot4.test | 1 - test/snapshot_up.test | 1 - test/swarmvtab3.test | 1 - test/swarmvtabfault.test | 1 - test/table.test | 1 + test/tester.tcl | 1 - test/trigger7.test | 1 + test/triggerE.test | 1 + test/unionvtab.test | 1 - test/unionvtabfault.test | 1 - test/vtab1.test | 1 + test/wherelimit2.test | 1 - test/window5.test | 1 - test/windowfault.test | 1 - test/zipfile2.test | 1 - tool/genfkey.test | 1 - 111 files changed, 157 insertions(+), 217 deletions(-) diff --git a/ext/fts5/test/fts5connect.test b/ext/fts5/test/fts5connect.test index c615d4c734..46077340ca 100644 --- a/ext/fts5/test/fts5connect.test +++ b/ext/fts5/test/fts5connect.test @@ -244,4 +244,3 @@ foreach {tn sql res} { } finish_test - diff --git a/ext/fts5/test/fts5first.test b/ext/fts5/test/fts5first.test index b2cac1fdf1..357672de68 100644 --- a/ext/fts5/test/fts5first.test +++ b/ext/fts5/test/fts5first.test @@ -93,4 +93,3 @@ do_catchsql_test 3.3 { SELECT * FROM x2('^a'); } {1 {fts5: phrase queries are not supported (detail!=full)}} finish_test - diff --git a/ext/fts5/test/fts5rank.test b/ext/fts5/test/fts5rank.test index 0a986b5005..e8f5473c4b 100644 --- a/ext/fts5/test/fts5rank.test +++ b/ext/fts5/test/fts5rank.test @@ -163,4 +163,3 @@ do_execsql_test 5.1 { } {30 31 32 33 34 35 36 37 38 39 40} finish_test - diff --git a/ext/fts5/test/fts5rebuild.test b/ext/fts5/test/fts5rebuild.test index eb03279997..ae881c02f0 100644 --- a/ext/fts5/test/fts5rebuild.test +++ b/ext/fts5/test/fts5rebuild.test @@ -43,7 +43,6 @@ sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.5 { DELETE FROM f1_data; } {} -sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 1.6 { INSERT INTO f1(f1) VALUES('integrity-check'); diff --git a/ext/fts5/test/fts5rowid.test b/ext/fts5/test/fts5rowid.test index 79064e55ae..8935ecfea7 100644 --- a/ext/fts5/test/fts5rowid.test +++ b/ext/fts5/test/fts5rowid.test @@ -75,7 +75,6 @@ do_execsql_test 2.4 { UPDATE x1_data SET block = X''; SELECT count(fts5_decode(rowid, block)) FROM x1_data; } $res -sqlite3_db_config db DEFENSIVE 1 do_execsql_test 2.5 { INSERT INTO x1(x1, rank) VALUES('pgsz', 1024); diff --git a/ext/fts5/test/fts5vocab2.test b/ext/fts5/test/fts5vocab2.test index 4a0a1f4e3d..9566441a46 100644 --- a/ext/fts5/test/fts5vocab2.test +++ b/ext/fts5/test/fts5vocab2.test @@ -206,4 +206,3 @@ do_execsql_test 3.5 { } finish_test - diff --git a/ext/rbu/rbu1.test b/ext/rbu/rbu1.test index 1d16c1cd0a..7ec075b7e0 100644 --- a/ext/rbu/rbu1.test +++ b/ext/rbu/rbu1.test @@ -670,4 +670,3 @@ foreach {tn3 create_vfs destroy_vfs} { finish_test - diff --git a/ext/rbu/rbu10.test b/ext/rbu/rbu10.test index 4b398b6ab3..a7c63cf6db 100644 --- a/ext/rbu/rbu10.test +++ b/ext/rbu/rbu10.test @@ -185,4 +185,3 @@ do_test 4.3 { finish_test - diff --git a/ext/rbu/rbu11.test b/ext/rbu/rbu11.test index fdc701aceb..5a4219b001 100644 --- a/ext/rbu/rbu11.test +++ b/ext/rbu/rbu11.test @@ -195,4 +195,3 @@ do_test 4.7.2 { } {1 {SQLITE_ERROR - rbu_state mismatch error}} finish_test - diff --git a/ext/rbu/rbu12.test b/ext/rbu/rbu12.test index a83d0891a3..7816bfe89f 100644 --- a/ext/rbu/rbu12.test +++ b/ext/rbu/rbu12.test @@ -232,4 +232,3 @@ do_multiclient_test tn { } finish_test - diff --git a/ext/rbu/rbu13.test b/ext/rbu/rbu13.test index ad67a98f80..624c587cc3 100644 --- a/ext/rbu/rbu13.test +++ b/ext/rbu/rbu13.test @@ -62,4 +62,3 @@ do_execsql_test 1.4 { finish_test - diff --git a/ext/rbu/rbu14.test b/ext/rbu/rbu14.test index d4f97ac32c..07f6784094 100644 --- a/ext/rbu/rbu14.test +++ b/ext/rbu/rbu14.test @@ -92,4 +92,3 @@ foreach {tn schema} { finish_test - diff --git a/ext/rbu/rbu3.test b/ext/rbu/rbu3.test index 995b3123fd..da87561fbb 100644 --- a/ext/rbu/rbu3.test +++ b/ext/rbu/rbu3.test @@ -203,5 +203,3 @@ do_test 5.3 { do_test 6.1 { sqlite3rbu_internal_test } {} finish_test - - diff --git a/ext/rbu/rbu5.test b/ext/rbu/rbu5.test index 8e4ae8cb69..3696dfb874 100644 --- a/ext/rbu/rbu5.test +++ b/ext/rbu/rbu5.test @@ -300,7 +300,3 @@ foreach {tn idx} { finish_test - - - - diff --git a/ext/rbu/rbu6.test b/ext/rbu/rbu6.test index f05721574a..bb5b17f425 100644 --- a/ext/rbu/rbu6.test +++ b/ext/rbu/rbu6.test @@ -100,4 +100,3 @@ for {set nStep 8} {$nStep < 20} {incr nStep} { finish_test - diff --git a/ext/rbu/rbu7.test b/ext/rbu/rbu7.test index f773c9e5a9..1e3bc174dd 100644 --- a/ext/rbu/rbu7.test +++ b/ext/rbu/rbu7.test @@ -106,5 +106,3 @@ foreach {tn tbl} { } finish_test - - diff --git a/ext/rbu/rbu8.test b/ext/rbu/rbu8.test index 75edd4efba..c0ccd8c5eb 100644 --- a/ext/rbu/rbu8.test +++ b/ext/rbu/rbu8.test @@ -72,4 +72,3 @@ integrity_check 1.3.3 finish_test - diff --git a/ext/rbu/rbu9.test b/ext/rbu/rbu9.test index 3ce649d250..0efdc1dde5 100644 --- a/ext/rbu/rbu9.test +++ b/ext/rbu/rbu9.test @@ -125,4 +125,3 @@ foreach {tn idx} { finish_test - diff --git a/ext/rbu/rbuA.test b/ext/rbu/rbuA.test index 286194c4fc..642caca196 100644 --- a/ext/rbu/rbuA.test +++ b/ext/rbu/rbuA.test @@ -80,4 +80,3 @@ do_test 2.2 { finish_test - diff --git a/ext/rbu/rbuB.test b/ext/rbu/rbuB.test index c007fb7d9a..ece51c39b2 100644 --- a/ext/rbu/rbuB.test +++ b/ext/rbu/rbuB.test @@ -59,4 +59,3 @@ sqlite3_shutdown test_sqlite3_log sqlite3_initialize finish_test - diff --git a/ext/rbu/rbuC.test b/ext/rbu/rbuC.test index 89fd01518f..ff3d4d5075 100644 --- a/ext/rbu/rbuC.test +++ b/ext/rbu/rbuC.test @@ -139,4 +139,3 @@ foreach {tn schema} { finish_test - diff --git a/ext/rbu/rbucollate.test b/ext/rbu/rbucollate.test index 3b3b022a5b..ccc0976247 100644 --- a/ext/rbu/rbucollate.test +++ b/ext/rbu/rbucollate.test @@ -60,4 +60,3 @@ do_test 1.2 { #forcedelete testrbu.db finish_test - diff --git a/ext/rbu/rbucrash.test b/ext/rbu/rbucrash.test index f42218105b..34ac2c86fe 100644 --- a/ext/rbu/rbucrash.test +++ b/ext/rbu/rbucrash.test @@ -145,4 +145,3 @@ for {set nPre 0} {$nPre < $rbu_num_steps} {incr nPre} { } finish_test - diff --git a/ext/rbu/rbucrash2.test b/ext/rbu/rbucrash2.test index 5f2ba604d1..9ff6eba4f2 100644 --- a/ext/rbu/rbucrash2.test +++ b/ext/rbu/rbucrash2.test @@ -103,4 +103,3 @@ for {set x 1} {$x < 2} {incr x} { } finish_test - diff --git a/ext/rbu/rbudiff.test b/ext/rbu/rbudiff.test index 6f6af82804..965ce297e3 100644 --- a/ext/rbu/rbudiff.test +++ b/ext/rbu/rbudiff.test @@ -300,4 +300,3 @@ tablE t1 USING FTs5(c); finish_test - diff --git a/ext/rbu/rbudor.test b/ext/rbu/rbudor.test index dcee7ac381..df4d934de7 100644 --- a/ext/rbu/rbudor.test +++ b/ext/rbu/rbudor.test @@ -56,4 +56,3 @@ do_execsql_test 1.4 { } [list 1 $bigA 2 $bigB] finish_test - diff --git a/ext/rbu/rbufault.test b/ext/rbu/rbufault.test index 3e78b6e09e..247a991899 100644 --- a/ext/rbu/rbufault.test +++ b/ext/rbu/rbufault.test @@ -234,4 +234,3 @@ foreach {tn2 setup sql expect} { } finish_test - diff --git a/ext/rbu/rbufault2.test b/ext/rbu/rbufault2.test index ec89397fdc..5b006f78ea 100644 --- a/ext/rbu/rbufault2.test +++ b/ext/rbu/rbufault2.test @@ -55,4 +55,3 @@ do_faultsim_test 1 -faults oom* -prep { finish_test - diff --git a/ext/rbu/rbufault3.test b/ext/rbu/rbufault3.test index 4fd202d0b7..5d44885e9e 100644 --- a/ext/rbu/rbufault3.test +++ b/ext/rbu/rbufault3.test @@ -95,4 +95,3 @@ foreach {fault errlist} { } finish_test - diff --git a/ext/rbu/rbufault4.test b/ext/rbu/rbufault4.test index fe6cc90dc9..551b8b2b6f 100644 --- a/ext/rbu/rbufault4.test +++ b/ext/rbu/rbufault4.test @@ -63,4 +63,3 @@ for {set tn 1} {1} {incr tn} { finish_test - diff --git a/ext/rbu/rbufts.test b/ext/rbu/rbufts.test index c2821a9555..95d4e75c52 100644 --- a/ext/rbu/rbufts.test +++ b/ext/rbu/rbufts.test @@ -131,4 +131,3 @@ do_test 3.3 { finish_test - diff --git a/ext/rbu/rbumulti.test b/ext/rbu/rbumulti.test index 59c6538c6c..5579a5f5bf 100644 --- a/ext/rbu/rbumulti.test +++ b/ext/rbu/rbumulti.test @@ -172,4 +172,3 @@ for {set i 0} {$i<=3} {incr i} { finish_test - diff --git a/ext/rbu/rbuprogress.test b/ext/rbu/rbuprogress.test index 078b3b0d30..db479e32e5 100644 --- a/ext/rbu/rbuprogress.test +++ b/ext/rbu/rbuprogress.test @@ -416,4 +416,3 @@ foreach {bReopen} { 0 1 } { finish_test - diff --git a/ext/rbu/rburesume.test b/ext/rbu/rburesume.test index d03894e135..a2cf9bc4ab 100644 --- a/ext/rbu/rburesume.test +++ b/ext/rbu/rburesume.test @@ -251,4 +251,3 @@ for {set n 1} {$n < 5000} {incr n} { } finish_test - diff --git a/ext/rbu/rbusave.test b/ext/rbu/rbusave.test index 1bb71a8e05..210d7b545a 100644 --- a/ext/rbu/rbusave.test +++ b/ext/rbu/rbusave.test @@ -102,4 +102,3 @@ do_execsql_test 1.5 { } {1 one 1 3 3 3 4 4 4 1 one 1 3 3 3 4 4 4} finish_test - diff --git a/ext/rbu/rbusplit.test b/ext/rbu/rbusplit.test index 678f388dcf..34fef38677 100644 --- a/ext/rbu/rbusplit.test +++ b/ext/rbu/rbusplit.test @@ -92,4 +92,3 @@ foreach {tn cmd} { } finish_test - diff --git a/ext/rbu/rbutemplimit.test b/ext/rbu/rbutemplimit.test index 274f870b73..9397b568df 100644 --- a/ext/rbu/rbutemplimit.test +++ b/ext/rbu/rbutemplimit.test @@ -126,4 +126,3 @@ do_test 1.6.1 { do_test 1.6.2 { info commands rbu } {} finish_test - diff --git a/ext/rbu/rbuvacuum.test b/ext/rbu/rbuvacuum.test index dba0ef37e0..1785f529b1 100644 --- a/ext/rbu/rbuvacuum.test +++ b/ext/rbu/rbuvacuum.test @@ -397,4 +397,3 @@ do_test 3.5 { catch { db close } finish_test - diff --git a/ext/rbu/rbuvacuum2.test b/ext/rbu/rbuvacuum2.test index 0a1fe3da94..4713580c70 100644 --- a/ext/rbu/rbuvacuum2.test +++ b/ext/rbu/rbuvacuum2.test @@ -232,4 +232,3 @@ do_test 6.3 { } {ok} finish_test - diff --git a/ext/repair/test/checkindex01.test b/ext/repair/test/checkindex01.test index 25930397d3..97973aee71 100644 --- a/ext/repair/test/checkindex01.test +++ b/ext/repair/test/checkindex01.test @@ -347,5 +347,3 @@ do_index_check_test 7.3 t7i3 { do_index_check_test 7.4 t7i4 { {} 1,1 {} 3,3 } - - diff --git a/ext/rtree/rtree8.test b/ext/rtree/rtree8.test index 66e0de0d00..12e75a6850 100644 --- a/ext/rtree/rtree8.test +++ b/ext/rtree/rtree8.test @@ -103,7 +103,6 @@ populate_t1 50 do_execsql_test rtree8-2.1.1 { SELECT max(nodeno) FROM t1_node } {5} sqlite3_db_config db DEFENSIVE 0 do_execsql_test rtree8-2.1.2 { DELETE FROM t1_node } {} -sqlite3_db_config db DEFENSIVE 1 for {set i 1} {$i <= 50} {incr i} { do_catchsql_test rtree8-2.1.3.$i { SELECT * FROM t1 WHERE id = $i @@ -127,7 +126,6 @@ sqlite3_db_config db DEFENSIVE 0 do_execsql_test rtree8-2.2.1 { DELETE FROM t1_parent } {} -sqlite3_db_config db DEFENSIVE 1 do_catchsql_test rtree8-2.2.2 { DELETE FROM t1 WHERE id=25 } {1 {database disk image is malformed}} diff --git a/ext/session/sessionC.test b/ext/session/sessionC.test index 390a31deb6..74370cb79a 100644 --- a/ext/session/sessionC.test +++ b/ext/session/sessionC.test @@ -195,4 +195,3 @@ do_test 3.3 { finish_test - diff --git a/ext/session/sessionD.test b/ext/session/sessionD.test index 84c31cbc2f..ec652e2d6b 100644 --- a/ext/session/sessionD.test +++ b/ext/session/sessionD.test @@ -255,4 +255,3 @@ do_catchsql_test 4.5.2 { } {1 {no such table: ixua.i8}} finish_test - diff --git a/ext/session/sessionE.test b/ext/session/sessionE.test index 9821dde816..9cec7d779d 100644 --- a/ext/session/sessionE.test +++ b/ext/session/sessionE.test @@ -111,5 +111,3 @@ do_changeset_test 3.4 S { S delete finish_test - - diff --git a/ext/session/sessionF.test b/ext/session/sessionF.test index ba57bf85ec..6a6eabcfd5 100644 --- a/ext/session/sessionF.test +++ b/ext/session/sessionF.test @@ -292,4 +292,3 @@ foreach {tn setup1 sql1 setup2 sql2 result} { finish_test - diff --git a/ext/session/sessionG.test b/ext/session/sessionG.test index 1b5f5473f0..58ea17d2ee 100644 --- a/ext/session/sessionG.test +++ b/ext/session/sessionG.test @@ -248,4 +248,3 @@ do_execsql_test 6.4 { finish_test - diff --git a/ext/session/sessionH.test b/ext/session/sessionH.test index 643fdb3fbe..3f5a28dc74 100644 --- a/ext/session/sessionH.test +++ b/ext/session/sessionH.test @@ -36,4 +36,3 @@ do_test 1.0 { finish_test - diff --git a/ext/session/sessionfault2.test b/ext/session/sessionfault2.test index fb848e1935..dd00eaa1c8 100644 --- a/ext/session/sessionfault2.test +++ b/ext/session/sessionfault2.test @@ -282,4 +282,3 @@ do_faultsim_test 3.2 -faults oom* -prep { finish_test - diff --git a/ext/session/sessionrebase.test b/ext/session/sessionrebase.test index ced9f2240d..cdf3322838 100644 --- a/ext/session/sessionrebase.test +++ b/ext/session/sessionrebase.test @@ -474,4 +474,3 @@ foreach {tn cmd rebasable} { catch { R delete } } finish_test - diff --git a/ext/session/sessionstat1.test b/ext/session/sessionstat1.test index 082c02bcf1..774899d96b 100644 --- a/ext/session/sessionstat1.test +++ b/ext/session/sessionstat1.test @@ -308,4 +308,3 @@ do_test 4.2.3 { } {t3 null 3} finish_test - diff --git a/ext/session/sessionwor.test b/ext/session/sessionwor.test index d906a92b62..2b2f8ca7e2 100644 --- a/ext/session/sessionwor.test +++ b/ext/session/sessionwor.test @@ -54,4 +54,3 @@ do_iterator_test 1.3 t1 { } finish_test - diff --git a/manifest b/manifest index 8b6de01a80..f9cf3fcb60 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enable\sDEFENSIVE\smode\sby\sdefault\sfor\stests.\s\sThis\srequires\slots\sof\scase\sof\nturning\sDEFENSIVE\soff\sin\sorder\sto\sdodgy\sthings\sto\sthe\sdatabase\sfor\stesting\npurposes.\s\sNo\sall\sof\sthose\scases\sare\syet\shandled,\sso\s"make\stest"\sdoes\snot\srun\nto\scompletion. -D 2018-11-06T19:26:04.536 +C Add\sthe\sSQLITE_DEFAULT_DEFENSIVE\scompile-time\soption.\s\sFix\sup\stest\scases\nso\sthat\sthey\swork\swith\sDEFENSIVE\senabled. +D 2018-11-07T02:17:01.958 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -151,7 +151,7 @@ F ext/fts5/test/fts5colset.test a30473451321bbf0b6218af62e96b4ae5fa99931cfdb210b F ext/fts5/test/fts5columnsize.test 45459ce4dd9fd853b6044cdc9674921bff89e3d840f348ca8c1630f9edbf5482 F ext/fts5/test/fts5config.test 60094712debc59286c59aef0e6cf511c37d866802776a825ce437d26afe0817f F ext/fts5/test/fts5conflict.test 655925678e630d3cdf145d18725a558971806416f453ac8410ca8c04d934238d -F ext/fts5/test/fts5connect.test b12a2a8b02af3c31c18abbc33aa8100d364de19a888a44457484d21dbccb18a7 +F ext/fts5/test/fts5connect.test 08030168fc96fc278fa81f28654fb7e90566f33aff269c073e19b3ae9126b2f4 F ext/fts5/test/fts5content.test 688d5ac7af194ebc67495daea76a69e3cd5480122c2320e72d41241b423b4116 F ext/fts5/test/fts5corrupt.test 77ae6f41a7eba10620efb921cf7dbe218b0ef232b04519deb43581cb17a57ebe F ext/fts5/test/fts5corrupt2.test 7453752ba12ce91690c469a6449d412561cc604b1dec994e16ab132952e7805f @@ -175,7 +175,7 @@ F ext/fts5/test/fts5fault9.test 098e6b894bbdf9b2192f994a30f4043673fb3f338b6b8ab1 F ext/fts5/test/fts5faultA.test be4487576bff8c22cee6597d1893b312f306504a8c6ccd3c53ca85af12290c8c F ext/fts5/test/fts5faultB.test e6d04f9ea7b21be1d89abb8df2cb4baf65b0453b744d5a805fcd3ef45ff86a7e F ext/fts5/test/fts5faultD.test cc5d1225556e356615e719c612e845d41bff7d5a -F ext/fts5/test/fts5first.test 707a591b1b7d893fcfcb2366cbfe56aefab5d9c7cfa58bef35eba73a1dbf3b29 +F ext/fts5/test/fts5first.test 3fcf2365c00a15fc9704233674789a3b95131d12de18a9b996159f6909dc8079 F ext/fts5/test/fts5full.test 49b565da02918c06e58f51f0b953b0302b96f155aa68baba24782b81570685e2 F ext/fts5/test/fts5fuzz1.test 238d8c45f3b81342aa384de3e581ff2fa330bf922a7b69e484bbc06051a1080e F ext/fts5/test/fts5hash.test a4cf51acad99bfc43c16fb74f9d22495dc221ae0701fc5e908ca963a9b26a02b @@ -195,10 +195,10 @@ F ext/fts5/test/fts5porter.test 8d08010c28527db66bc3feebd2b8767504aaeb9b101a9863 F ext/fts5/test/fts5porter2.test 0d251a673f02fa13ca7f011654873b3add20745f7402f108600a23e52d8c7457 F ext/fts5/test/fts5prefix.test a0fa67b06650f2deaa7bf27745899d94e0fb547ad9ecbd08bfad98c04912c056 F ext/fts5/test/fts5query.test ac363b17a442620bb0780e93c24f16a5f963dfe2f23dc85647b869efcfada728 -F ext/fts5/test/fts5rank.test beb1adae7b076beea98277f140e713f9713f503866d3ff7286c9805b220dd4a2 -F ext/fts5/test/fts5rebuild.test aa277a56292e0dc936815917e4546792c591a142c7ffb3e73466817901522d7d +F ext/fts5/test/fts5rank.test ca5000241924ecc2882db33c60f4f3a62b1ee6b16b5a9c8c6ddd9b6b2138489c +F ext/fts5/test/fts5rebuild.test 55d6f17715cddbf825680dd6551efbc72ed916d8cf1cde40a46fc5d785b451e7 F ext/fts5/test/fts5restart.test 835ecc8f449e3919f72509ab58056d0cedca40d1fe04108ccf8ac4c2ba41f415 -F ext/fts5/test/fts5rowid.test e2ffedefb04c8fb1e954ddb55839094608c4967379eb8a508fd2249e1ae079f9 +F ext/fts5/test/fts5rowid.test b8790ec170a8dc1942a15aef3db926a5f3061b1ff171013003d8297203a20ad6 F ext/fts5/test/fts5simple.test 313ad28ef38ebe25f0a1673dd18f2fac446e25feb15bbb0c223a65ea00594f72 F ext/fts5/test/fts5simple2.test 258a1b0c590409bfa5271e872c79572b319d2a56554d0585f68f146a0da603f0 F ext/fts5/test/fts5simple3.test d5c74a9d3ca71bd5dd5cacb7c55b86ea12cdddfc8b1910e3de2995206898380f @@ -215,7 +215,7 @@ F ext/fts5/test/fts5unindexed.test 9021af86a0fb9fc616f7a69a996db0116e7936d0db638 F ext/fts5/test/fts5update.test 0737876e20e97a6a6abf45de19fc99315727bcee6a83fadcada1cc080b9aa8f0 F ext/fts5/test/fts5version.test c8f2cc105f0abf0224965f93e584633dee3e06c91478bc67e468f7cfdf97fd6a F ext/fts5/test/fts5vocab.test 2de834ee6405130d3373817ced8fefbfee392b63d932e471740e09829f1e4510 -F ext/fts5/test/fts5vocab2.test 2beeec974a305a1d79b91426622cc922c87065874437d22b400de7438979959e +F ext/fts5/test/fts5vocab2.test c361635893cc9454e7dcd73c2ead0e86e7dca781b89a45f04c3ac62d57e1b08e F ext/fts5/tool/fts5speed.tcl b0056f91a55b2d1a3684ec05729de92b042e2f85 F ext/fts5/tool/fts5txt2db.tcl 526a9979c963f1c54fd50976a05a502e533a4c59 F ext/fts5/tool/loadfts5.tcl 95b03429ee6b138645703c6ca192c3ac96eaf093 @@ -314,40 +314,40 @@ F ext/misc/wholenumber.c 784b12543d60702ebdd47da936e278aa03076212 F ext/misc/zipfile.c c4de8f0ad446ce4a49aae11ff7b771cd7af60d7136c0bcfb53da1475b9075e79 F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64 F ext/rbu/rbu.c 8681f6157db6adc82c34af24b14ea8a3be0146ad2a3b6c1d5da6cb8a5796c8ce -F ext/rbu/rbu1.test 41123c64e8c88bd14eb7d3f8562f37fa87aaeb154b1eade2881de21d3504be55 -F ext/rbu/rbu10.test 1846519a438697f45e9dcb246908af81b551c29e1078d0304fae83f1fed7e9ee -F ext/rbu/rbu11.test 9bc68c2d3dbeb1720153626e3bd0466dcc017702 -F ext/rbu/rbu12.test bde22ed0004dd5d1888c72a84ae407e574aeae16 -F ext/rbu/rbu13.test 462ff799c4afedc3ef8a47ff818c0ffbf14ae4f2 -F ext/rbu/rbu14.test 01f5dcba904aecadbaea69d4ccdc2ea43dd30560 -F ext/rbu/rbu3.test 8bd4c6b87367c358981b6a47dc3d654fa60bff90 -F ext/rbu/rbu5.test cf1fa84d6107efd73e292a7be8e1fb31953ca45c -F ext/rbu/rbu6.test 32e8ed60631b6facdb6366bd2b5f5f25245e7edb -F ext/rbu/rbu7.test fd025d5ba440fcfe151fbb0e3835e1e7fe964fa1 -F ext/rbu/rbu8.test 3bbf2c35d71a843c463efe93946f14ad10c3ede0 -F ext/rbu/rbu9.test 0806d1772c9f4981774ff028de6656e4183082af -F ext/rbu/rbuA.test 4e58e46e60d4064248614c43303d71f1b18cc804dd834ce6a913b3861828b28d -F ext/rbu/rbuB.test c25bc325b8072a766e56bb76c001866b405925c2 -F ext/rbu/rbuC.test efe47db508a0269b683cb2a1913a425ffd39a831 +F ext/rbu/rbu1.test 221d9c18a5e600ac9ac6b1810d99d9f99163a7909ba61597876ab6e4d4beb3d6 +F ext/rbu/rbu10.test 0a201c32202143f23c81c0144503da339786fc20acb7a2fda11601b65659f314 +F ext/rbu/rbu11.test 5c834cf491086b45e071eabf71f708febc143e86a384a92de69e0b1a4cace144 +F ext/rbu/rbu12.test 29f8b2118f6c96fac3755bd6d2b55c2db24f878b1f11fbfbe294f3a230a3dcdc +F ext/rbu/rbu13.test 1285298e3360ec74511764841b3c174dcfe21da2f618c22febf1a20abd0365c2 +F ext/rbu/rbu14.test 4a7bf0b3a4516d3ab0bc0ba4ceb53eb7e3324147ccda152e561060f659dbba31 +F ext/rbu/rbu3.test d6c6cc7a1326e8e23b9820f30bd3054f22092e503fadfd2a660ae006653f6d80 +F ext/rbu/rbu5.test 724b38ea5f722e3d22dc76343860bd998bb676c3f78c4bc8175df5c5d7720e23 +F ext/rbu/rbu6.test 401064236d3cf86b7edc01c586d7c5554f48553946fbfa1a3af35d7e47dce9e3 +F ext/rbu/rbu7.test ae25f47b56f178197fc1098537a35a39176cc73d1629b03dc9d795929fc36ec2 +F ext/rbu/rbu8.test b98a6fc58ead84a0e6ddee775b9702cd981f318d5d4fd1d4df0fa0c40db7251b +F ext/rbu/rbu9.test 0e4d985e25620d61920597e8ea69c871c9e8c1f5a0be2ae9fa70bb641d74378c +F ext/rbu/rbuA.test b34a90cb495682c25b5fc03a9d5e7a4fc99541c29256f25e2e2a4f6542b4f5b3 +F ext/rbu/rbuB.test 52b07158824c6927b7e25554ace92a695cdebfc296ae3d308ac386984aded9bc +F ext/rbu/rbuC.test 80f1cc2fb74f44b1128fd0ed8eedab3a76fefeb72a947860e2869ef76fc8dc6b F ext/rbu/rbu_common.tcl acfb7fbbaf8d46a9f6f6a5ec795616c84d705e1565d918afe43f0ff53ea0efa5 -F ext/rbu/rbucollate.test 86d6fc9b8f59a27b7b5a6e20b5e29816d338a0dbdea8c54bfcc549a0d437f3ea -F ext/rbu/rbucrash.test 61470d977a06a0abc2ec35b05d82a1d7d87d10f4ffabad14c1c231edc942ad66 -F ext/rbu/rbucrash2.test b2ecbdd7bb72c88bd217c65bd00dafa07f7f2d4d -F ext/rbu/rbudiff.test 3e605cf624d00d04d0fb1316a3acec4fbe3b3ac5 -F ext/rbu/rbudor.test 99b05cc0df613e962c2c8085cfb05686a09cf315 -F ext/rbu/rbufault.test 2654aef20f8ee7de37c9c1997a44f2773dc7bf24887adea39fb19314ef32cb90 -F ext/rbu/rbufault2.test 9a7f19edd6ea35c4c9f807d8a3db0a03a5670c06 -F ext/rbu/rbufault3.test 0913c1aeaee266d9c36c33179341a5a504aad7d423d1979cfec43c8346a29899 -F ext/rbu/rbufault4.test 34e70701cbec51571ffbd9fbf9d4e0f2ec495ca7 -F ext/rbu/rbufts.test a2bbd202c9321fba15fb4a62a90add7d70e07bd8404e1e598135adbfff8a0508 -F ext/rbu/rbumulti.test 2cf153ab3d5861ff26517dc6cbaec430787a59f1d50e8771fe7a7529a0551cf1 -F ext/rbu/rbuprogress.test 1849d4e0e50616edf5ce75ce7db86622e656b5cf -F ext/rbu/rburesume.test 8acb77f4a422ff55acfcfc9cc15a5cb210b1de83 -F ext/rbu/rbusave.test 0f43b6686084f426ddd040b878426452fd2c2f48 -F ext/rbu/rbusplit.test 69271c790732b28bd465551d80b0a9a3f074e189896ee8490ce56d22078c124d -F ext/rbu/rbutemplimit.test cd553a9288d515d0b5f87d277e76fd18c4aa740b761e7880fab11ce986ea18d1 -F ext/rbu/rbuvacuum.test ff357e9b556ca7ad4673da0ff7f244def919ff858e0f9f350d3e30fdd83a62a8 -F ext/rbu/rbuvacuum2.test 2074ab14fe66e1c7e7210c62562650dcd215bbaa +F ext/rbu/rbucollate.test cac528a9a46318cba42e61258bb42660bbbf4fdb9a8c863de5a54ad0c658d197 +F ext/rbu/rbucrash.test 000981a1fe8a6e4d9a684232f6a129e66a3ef595f5ed74655e2f9c68ffa613b4 +F ext/rbu/rbucrash2.test efa143cc94228eb0266d3f1abfbee60a5838a84cef7cc3fcb8c145b74d96fd41 +F ext/rbu/rbudiff.test 156957851136b63c143478518dc1bda6c832103cdbe8ac1d7cdd47edb3cbe0a3 +F ext/rbu/rbudor.test e3e8623926012f43eebe51fedf06a102df2640750d971596b052495f2536db20 +F ext/rbu/rbufault.test 2d7f567b79d558f6e093c58808cab4354f8a174e3802f69e7790a9689b3c09f8 +F ext/rbu/rbufault2.test 06e735c002c17802d93debca41f59b027e7429db7de17f2a81318ecfd3c651d4 +F ext/rbu/rbufault3.test e0052ccba428ffdd2bb989d3ae84716f058ec5ab5f7196c64ba407b9d23c7255 +F ext/rbu/rbufault4.test 03d2849c3df7d7bd14a622e789ff049e5080edd34a79cd432e01204db2a5930a +F ext/rbu/rbufts.test 0ae8d1da191c75bd776b86e24456db0fb6e97b7c944259fae5407ea55d23c31d +F ext/rbu/rbumulti.test 5fb139058f37ddc5a113c5b93238de915b769b7792de41b44c983bc7c18cf5b9 +F ext/rbu/rbuprogress.test 04614ff8820bab9c1ec1b7dbec1edc4b45474421d4fe7abbd2a879a9c02884f9 +F ext/rbu/rburesume.test dbdc4ca504e9c76375a69e5f0d91205db967dcc509a5166ca80231f8fda49eb1 +F ext/rbu/rbusave.test f4190a1a86fccf84f723af5c93813365ae33feda35845ba107b59683d1cdd926 +F ext/rbu/rbusplit.test b37e7b40b38760881dc9c854bd40b4744c6b6cd74990754eca3bda0f407051e8 +F ext/rbu/rbutemplimit.test 7f408f49b90fa0a720d7599f3aec74a3c85e6cd78e56fdf726ce00af9147a341 +F ext/rbu/rbuvacuum.test 55e101e90168c2b31df6c9638fe73dc7f7cc666b6142266d1563697d79f73534 +F ext/rbu/rbuvacuum2.test 0a7669bbabdaeed915f02f59f33fe20e13d4932ba2086fe00a82064d9424c80b F ext/rbu/sqlite3rbu.c 71f8c09948d09ec9c5a8dbe7127e8ef61ef0853e698b2650be2485ac7b9c75c8 F ext/rbu/sqlite3rbu.h b42bcd4d8357268c6c39ab2a60b29c091e89328fa8cc49c8fac5ab8d007e79b2 F ext/rbu/test_rbu.c baa23eb28457580673d2175e5f0c29ced0cd320ee819b13ad362398c53b96e90 @@ -358,7 +358,7 @@ F ext/repair/sqlite3_checker.c.in 4a5a3af3f450fe503e5a2985e98516dc2a6b9ad247449e F ext/repair/sqlite3_checker.tcl a9a2caa9660567257c177a91124d8c0dccdfa341e25c51e6da7f1fd9e601eafa F ext/repair/test/README.md 34b2f542cf5be7bffe479242b33ee3492cea30711e447cc4a1a86cb5915f419e F ext/repair/test/checkfreelist01.test 3e8aa6aeb4007680c94a8d07b41c339aa635cc78249442da72ff3f8297398a69 -F ext/repair/test/checkindex01.test 6945d0ffc0c1dc993b2ce88036b26e0f5d6fcc65da70fc9df27c2647bb358b0f +F ext/repair/test/checkindex01.test b530f141413b587c9eb78ff734de6bb79bc3515c335096108c12c01bddbadcec F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 F ext/rtree/geopoly.c 38ad90cab8dbd3dfba246d642f47366e40418e47fa55fe89f1078483d51b52c0 @@ -371,7 +371,7 @@ F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd F ext/rtree/rtree5.test 49c9041d713d54560b315c2c7ef7207ee287eba1b20f8266968a06f2e55d3142 F ext/rtree/rtree6.test 593e0d36510d5ac1d1fb39b018274ff17604fe8fdca8cf1f8e16559cea1477f4 F ext/rtree/rtree7.test c8fb2e555b128dd0f0bdb520c61380014f497f8a23c40f2e820acc9f9e4fdce5 -F ext/rtree/rtree8.test 9428c213f1bd52d77ef8772ceca1989993134acae315354c043645b694be7854 +F ext/rtree/rtree8.test 2d99006a1386663978c9e1df167554671e4f711c419175b39f332719deb1ce0e F ext/rtree/rtree9.test c646f12c8c1c68ef015c6c043d86a0c42488e2e68ed1bb1b0771a7ca246cbabf F ext/rtree/rtreeA.test ed2f1be9c06dde0b1ab93a95dd9e87eeaa02db2d30bcb4b9179b69ee3dc3319b F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9 @@ -401,22 +401,22 @@ F ext/session/session8.test 8e194b3f655d861ca36de5d4de53f702751bab3b F ext/session/session9.test 5409d90d8141881d08285ed1c2c0d8d10fb92069 F ext/session/sessionA.test 1feeab0b8e03527f08f2f1defb442da25480138f F ext/session/sessionB.test 886252dcb7e692e62ef7e357456200912e367823 -F ext/session/sessionC.test 97556f5164ac29f2344b24bd7de6a3a35a95c390 -F ext/session/sessionD.test d3617e29aa15c9413aee5286d99587633245d58d2ad28f3f331c822735418a22 -F ext/session/sessionE.test 0a616c4ad8fd2c05f23217ebb6212ef80b7fef30f5f086a6633a081f93e84637 -F ext/session/sessionF.test c2f178d4dfd723a5fd94a730ea2ccb44c669e3ce -F ext/session/sessionG.test 3edde849c4071078d92bd682c836186f6e4e5a3fb6bcf3fc1de1a7caa5e4427d -F ext/session/sessionH.test 332b60e4c2e0a680105e11936201cabe378216f307e2747803cea56fa7d9ebae +F ext/session/sessionC.test f8a5508bc059ae646e5ec9bdbca66ad24bc92fe99fda5790ac57e1f59fce2fdf +F ext/session/sessionD.test 4f91d0ca8afc4c3969c72c9f0b5ea9527e21de29039937d0d973f821e8470724 +F ext/session/sessionE.test b2010949c9d7415306f64e3c2072ddabc4b8250c98478d3c0c4d064bce83111d +F ext/session/sessionF.test d37ed800881e742c208df443537bf29aa49fd56eac520d0f0c6df3e6320f3401 +F ext/session/sessionG.test 3828b944cd1285f4379340fd36f8b64c464fc84df6ff3ccbc95578fd87140b9c +F ext/session/sessionH.test a417559f29a7e775950fc5fc82b3d01256a7cbe793ddf1180df234df823d56e2 F ext/session/session_common.tcl 29ec9910aca1e996ca1c8531b8cecabf96eb576aa53de65a8ff03d848b9a2a8b F ext/session/session_speed_test.c edc1f96fd5e0e4b16eb03e2a73041013d59e8723 F ext/session/sessionat.test efe88965e74ff1bc2af9c310b28358c02d420c1fb2705cc7a28f0c1cc142c3ec F ext/session/sessiondiff.test ad13dd65664bae26744e1f18eb3cbd5588349b7e9118851d8f9364248d67bcec F ext/session/sessionfault.test da273f2712b6411e85e71465a1733b8501dbf6f7 -F ext/session/sessionfault2.test 555a8504de03d59b369ef20209585da5aeb2671dedabc4584e9ffe6269689185 +F ext/session/sessionfault2.test dd593f80b6b4786f7adfe83c5939620bc505559770cc181332da26f29cddd7bb F ext/session/sessioninvert.test ae1a003a9ab1f8d64227dbb5c3a4c97e65b561b01e7b2953cf48683fb2724169 -F ext/session/sessionrebase.test 4e1bcfd26fd8ed8ac571746f56cceeb45184f4d65490ea0d405227cfc8a9cba8 -F ext/session/sessionstat1.test 41cd97c2e48619a41cdf8ae749e1b25f34719de638689221aa43971be693bf4e -F ext/session/sessionwor.test 2f3744236dc8b170a695b7d8ddc8c743c7e79fdc +F ext/session/sessionrebase.test ccfa716b23bd1d3b03217ee58cfd90c78d4b99f53e6a9a2f05e82363b9142810 +F ext/session/sessionstat1.test 218d351cf9fcd6648f125a26b607b140310160184723c2666091b54450a68fb5 +F ext/session/sessionwor.test 07f0b304dc4df5454906069140bf6ec67edcaa3c548f3683354003cf2c22b64a F ext/session/sqlite3session.c dbd6f7a89c1236d8e7b58f4e217391670ce91b9e6f85c16ba02832674ef0cf3c F ext/session/sqlite3session.h 05351d2f50a1203fdffbeb590fdbbc796c9a6bfcd0c9b26cf6db3854e3eb4294 F ext/session/test_session.c 98797aba475a799376c9a42214f2d1debf2d0c3cb657d9c8bbf4f70bf3fb4aec @@ -468,7 +468,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 6b81aae27b196925d8ff78824f4bbd435d6a40cd38dc324685e21735bb402109 F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e F src/loadext.c 448eab53ecdb566a1259ee2d45ebff9c0bc4a2cf393774488775c33e4fbe89bf -F src/main.c 03204aa22720654f0bc128b6d25626a89f9faca17e10ffdf738036d5453b13b3 +F src/main.c 0efc9f6fba87f7b406135062c9a1f00c5f73487730e38794c698be5f78cfea54 F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -602,19 +602,19 @@ F test/aggnested.test 18b00de006597e960a6b27ccec51474ac66cf1070a87c1933e5694dc02 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 2ecb8bbd52416642e41c9081182a8df05d42c75637afd4488aace78cc4b69e13 F test/alter.test 99e72759d48d6531ac2a9f346b4a9b5fe8f89c67a0fa5e916a3990d3b1fe9d09 -F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060 +F test/alter2.test a966ccfcddf9ce0a4e0e6ff1aca9e6e7948e0e242cd7e43fc091948521807687 F test/alter3.test 4d79934d812eaeacc6f22781a080f8cfe012fdc3 F test/alter4.test 7e93a21fe131e1dfeb317e90056856f96b10381fc7fe3a05e765569a23400433 F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959 F test/alterauth2.test c0a1ddf5b93d93cb0d15ba7acaf0c5c6fb515bbe861ede75b2d3fabad33b6499 -F test/altercol.test 53fb5e218c9296afc160f2c4fcbeaf42bd0604815d9b3896a7d2eec583ad8704 -F test/alterlegacy.test e7c07d605c2a85e7d1696c89e6bf64dfc932fc6d9320fe8708c8f5fc0b524d41 +F test/altercol.test 50095d59d07a178a2a6330ec2440b2f1a0b59918364c32d29b8a692f29a97a1a +F test/alterlegacy.test 82022721ce0de29cedc9a7af63bc9fcc078b0ee000f8283b4b6ea9c3eab2f44b F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9 F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b -F test/altertab.test fb8a9a2ab6deb5f860d27675f6213d14ab79b705e0d6350eead4ef3a3f73bf3e -F test/altertab2.test 159fd5f7b23ddc841fe678f579f9b1b8e69f44296f3ff75d1b4c155d37a59832 +F test/altertab.test ebb159e81589919852b2c3af8efbc25e6568bd758892fdc49cdaf1d73d26072f +F test/altertab2.test 228b406400c0ddd59b9494fdfd178eeb8f3c1075e9f692f36bc909b1ad3eaed3 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f -F test/analyze.test b3a9c67d00e1df7588a5b7be9a0292899f94fe8cac1f94a017277474ca2e59df +F test/analyze.test 7168c8bffa5d5cbc53c05b7e9c7fcdd24b365a1bc5046ce80c45efa3c02e6b7c F test/analyze3.test ff62d9029e6deb2c914490c6b00caf7fae47cc85cdc046e4a0d0a4d4b87c71d8 F test/analyze4.test cdf88f3f72b0f0643a1ff6c730fc5af1e42464d47478d9fbac84c333f72c014e F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4 @@ -647,7 +647,7 @@ F test/auth.test 3310d9c08e928beca42d3eadaaf53cef619d9d275f598565a3758a21ce63138 F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1 F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49 F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec -F test/autoinc.test 9d202b7dce6571e52b744138eff12610214501acd635abdd72d18736cd06fd22 +F test/autoinc.test 381f494fefa90acd999933829e2934efb6b40906db9d6a39e822e3f7b4c8bf61 F test/autoindex1.test a09958fa756129af10b6582bcbf3cbdf11e305e027b393f393caef801159dee0 F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df F test/autoindex3.test 2dd997d6590438b53e4f715f9278aa91c9299cf3f81246a0915269c35beb790e @@ -670,7 +670,7 @@ F test/bestindex1.test 852170bddbb21daa121fabcc274640ff83d7d8705912e8b5fe7ed2c5a F test/bestindex2.test 9a0ccd320b6525eec3a706aae6cdab7e1b7b5abca75027e39f39f755e76e5928 F test/bestindex3.test 001788a114ad96d81d5154fe77c7f1e26e84b3a2b5635ca29e4f96f6decc534e F test/bestindex4.test 210eac9323ef88881212d6ae90c84dad86ec14d82c6f4fc9a9ee24c76a8f2014 -F test/bestindex5.test 412b42f8036b28d8b2f3534d89389ad946a4b1a65a12263f51936f7424296f1b +F test/bestindex5.test 67c1166131bb59f9e47c00118f7d432ca5491e6cae6ca3f87ca9db20103a78f9 F test/bestindex6.test d856a9bb63d927493575823eed44053bc36251e241aa364e54d0f2a2d302e1d4 F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59 @@ -698,9 +698,9 @@ F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de F test/cacheflush.test af25bb1509df04c1da10e38d8f322d66eceedf61 F test/cachespill.test 895997f84a25b323b166aecb69baab2d6380ea98f9e0bcc688c4493c535cfab9 F test/capi2.test 34a1a9a96d543a2ec2c209696b11b164444f57253b1f2cba1c2e53fadede6c7b -F test/capi3.test b299c89d80891c6c9b7f0e4b199df002b8b9f11c19f07d4a6eb7b325f1244de0 +F test/capi3.test 3910a73c38ac76d69778dd9eb481ab7cd6ed59117fc047b4f6056a5c72529de1 F test/capi3b.test efb2b9cfd127efa84433cd7a2d72ce0454ae0dc4 -F test/capi3c.test e853c6c1f9a596e0bc58153be08706813bf5795d479d6f81581e3bda3f9d0909 +F test/capi3c.test 54e2dc0c8fd7c34ad1590d1be6864397da2438c95a9f5aee2f8fbc60c112e44b F test/capi3d.test 485048dc5cd07bc68011e4917ad035ad6047ab82 F test/capi3e.test 3d49c01ef2a1a55f41d73cba2b23b5059ec460fe F test/cast.test 5ceb920718d280b61163500a7d29e0e0a86458b1cbd92d96f962c9d970aa3857 @@ -730,7 +730,7 @@ F test/corrupt.test 141c39ea650c1365e85a49e402fa05cb9617fb97 F test/corrupt2.test a7f95356d19a4e8bf9423622ad865cabf48ae49dad40eb7a17a0b39f1cdd6948 F test/corrupt3.test f95d7bf78109e0b84eb285a787ce91a3fd6a2dd7d0cb55882abff3bdc081a57e F test/corrupt4.test 8d1d86b850fcc43e417450454f2044e52d55778a -F test/corrupt5.test 8ead52af76006f3286e9396cb41898018ccea107 +F test/corrupt5.test 387be3250795e2a86e6234745558b80efb248a357d0cd8e53bce75c7463f545d F test/corrupt6.test fc6a891716139665dae0073b6945e3670bf92568 F test/corrupt7.test b036f94bda4b0b23a2919bf717046ce9ecca4543 F test/corrupt8.test 2399dfe40d2c0c63af86706e30f3e6302a8d0516 @@ -743,12 +743,12 @@ F test/corruptE.test 82ccf4f8f543fdbedd4aa42c709cb077f7374c62 F test/corruptF.test be9fde98e4c93648f1ba52b74e5318edc8f59fe4 F test/corruptG.test adf79b669cbfd19e28c8191a610d083ae53a6d51 F test/corruptH.test 79801d97ec5c2f9f3c87739aa1ec2eb786f96454 -F test/corruptI.test 075fe1d75aa1d84e2949be56b6264376c41502e4 +F test/corruptI.test a17bbf54fdde78d43cf3cc34b0057719fd4a173a3d824285b67dc5257c064c7b F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4 -F test/corruptK.test 91550557849244a9904f4e090052e3f2c1c3f1106840d58b00ffaa3a8c2d3fc0 +F test/corruptK.test 5ef338c560ca4dfb7360828da16f1829be4deba3b378cafdc7a1cdaf027eb5c4 F test/cost.test b37db8a10d467a69e71a9f3d40bbb266c2f587742b37c6912f6e3f7185a0e216 F test/count.test cb2e0f934c6eb33670044520748d2ecccd46259c -F test/countofview.test 2d0ce23daca1bada0522c3d62e0e0c0d69ec4e0fc41df2bcd662a5e11169b9c9 +F test/countofview.test e3d4cd6900e4e4f074968ab24b8b87d3671cd624961bef40fd3a6b8f574343cf F test/coveridxscan.test 5ec98719a2e2914e8908dc75f7247d9b54a26df04625f846ac7900d5483f7296 F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f F test/crash2.test 5b14d4eb58b880e231361d3b609b216acda86651 @@ -772,7 +772,7 @@ F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c 652f85bac1770e927da139db513234a3eba308f72ac2f8b32f0093d7d19def70 -F test/dbpage.test dbf50a4d361f9e45a979432c727506065113124478a7d2db12074fa655e65d6c +F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 F test/dbstatus.test cd83aa623b8aab477269bc94cf8aa90c1e195a144561dd04a1620770aaa8524e F test/dbstatus2.test f5fe0afed3fa45e57cfa70d1147606c20d2ba23feac78e9a172f2fe8ab5b78ef F test/default.test 0cb49b1c315a0d81c81d775e407f66906a2a604d @@ -801,7 +801,7 @@ F test/e_expr.test ca8896601ade1e27c6559614c7f32c63d44636fdfa720436a160f09b8bf66 F test/e_fkey.test 9778696ef9fceacebed8d482d02b47287981faaedf6f73db563ea8a7afb546da F test/e_fts3.test 8cf40550bb088a6aa187c818c00fabe26ef82900a4cd5c66b427ccafe28bedaa F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e -F test/e_reindex.test 2bebf7b393e519198b7c654407221cf171a439b8 +F test/e_reindex.test 2b0e29344497d9a8a999453a003cb476b6b1d2eef2d6c120f83c2d3a429f3164 F test/e_resolve.test a61751c368b109db73df0f20fc75fb47e166b1d8 F test/e_select.test c5a669b4d63217aa10094ba737ba3ddd07bd439d4bc7a5b798f6ea32511cbe7c F test/e_select2.test aceb80ab927d46fba5ce7586ebabf23e2bb0604f @@ -895,7 +895,7 @@ F test/fts3am.test 218aa6ba0dfc50c7c16b2022aac5c6be593d08d8 F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18 F test/fts3ao.test 266989148fec6d9f1bb6c5382f7aa3dcea0e9cd444576e28dd2b9287ac7dd220 F test/fts3atoken.test 4b4c16fdcfc972f2cdbba212375a060a86ccf5f1 -F test/fts3auto.test 4eeb2a2e4f4533b94077beb8ef60c2fc82821b17a818f488f7a3decb7d328220 +F test/fts3auto.test 19097050a3ca7ab7a43b2be967cb3dfd8ddf841dfdc4eac88deb172ad2f209f2 F test/fts3aux1.test 7a170e172afdbceb67f5baa05941fd4fbf56af42f61daa3d140f4b4bf4cb68f6 F test/fts3aux2.test 7ae2b2c13aefdf4169279a27a5f51780ce57f6ba F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491 @@ -906,10 +906,10 @@ F test/fts3corrupt.test 46b9ddda7f6588fd5a5b1f4bb4fc0618dc45010e7dddb8a3a188baf3 F test/fts3corrupt2.test bf55c3fa0b0dc8ea1c0fe5543623bd27714585da6a129038fd6999fe3b0d25f3 F test/fts3corrupt3.test 0d5b69a0998b4adf868cc301fc78f3d0707745f1d984ce044c205cdb764b491f F test/fts3corrupt4.test a27259f4f25d60b4eca481d050b3cfee97eddb0d937d38f231408c5239066e11 -F test/fts3cov.test 95a6e1b3415dec831522419b351c323ac5b1df668eade1477a66161320a24e6d -F test/fts3d.test 34ca835cfb87635a3b65aaf67c8798b632c4046cbb1813d31d89740b59d0263d -F test/fts3defer.test 88873590700e0cd4e56e66f6024b96a37b12091a7afc892b092a980acd75f94a -F test/fts3defer2.test 9f70672efde9648ce8cf20f360390e0cb225ca95b00fff06b829f168eeb9dc28 +F test/fts3cov.test cb932743da52a1c79a1ab8983e26c8121cf02263d6ff16e1f642e6f9b8348338 +F test/fts3d.test 2bd8c97bcb9975f2334147173b4872505b6a41359a4f9068960a36afe07a679f +F test/fts3defer.test f4c20e4c7153d20a98ee49ee5f3faef624fefc9a067f8d8d629db380c4d9f1de +F test/fts3defer2.test 3da52ca2114e300e9971eee2f0cc1a2e5f27e6a9ee67957d49e63e41fdfcc0e7 F test/fts3defer3.test dd53fc13223c6d8264a98244e9b19abd35ed71cd F test/fts3drop.test 1b906e293d6773812587b3dc458cb9e8f3f0c297 F test/fts3e.test 1f6c6ac9cc8b772ca256e6b22aaeed50c9350851 @@ -923,23 +923,23 @@ F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f943 F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641 F test/fts3join.test 949b4f5ae3ae9cc2423cb865d711e32476bdb205ab2be923fdf48246e4a44166 F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6 -F test/fts3matchinfo.test 1d012ac55861fa19c02d36ae7ad02d568bd110d924a8779469ef6d7e7856974f +F test/fts3matchinfo.test aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a F test/fts3misc.test 0b20083efab36a42804bf8017a003f72f963c46163403dae7256493367d2f9d3 F test/fts3near.test 7e3354d46f155a822b59c0e957fd2a70c1d7e905 F test/fts3offsets.test b85fd382abdc78ebce721d8117bd552dfb75094c F test/fts3prefix.test fa794eaab0bdae466494947b0b153d7844478ab2 F test/fts3prefix2.test e1f0a822ca661dced7f12ce392e14eaf65609dce -F test/fts3query.test b911e997a4fdb188a921ebdeb7bdbce445b7382c934d76fae8b29aef457900c0 +F test/fts3query.test ca033ff2ebcc22c69d89032fb0bc1850997d31e7e60ecd26440796ba1654e78f F test/fts3rank.test cd99bc83a3c923c8d52afd90d86979cf05fc41849f892faeac3988055ef37b99 F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0 F test/fts3shared.test 57e26a801f21027b7530da77db54286a6fe4997e -F test/fts3snippet.test 1758244263b92ec56a2447f7362906a5baf0ee5406d84b9669fb22655324012b +F test/fts3snippet.test 8cf586fe4b6878192602a81a665448aacbbad80ade0867bb5299d40e73584311 F test/fts3sort.test ed34c716a11cc2009a35210e84ad5f9c102362ca F test/fts3tok1.test a663f4cac22a9505400bc22aacb818d7055240409c28729669ea7d4cc2120d15 F test/fts3tok_err.test 52273cd193b9036282f7bacb43da78c6be87418d F test/fts3varint.test 752c08ed5d32c5d7dc211b056f4ed68a76b7e36e F test/fts4aa.test 10aac8e9d62c7357590acfabe3fad01e9a9ce1cb -F test/fts4check.test 28e593f65e7fe788c929ea5ddd04db827c3fd74dd47af1d08aceee226d1e9e88 +F test/fts4check.test 6259f856604445d7b684c9b306b2efb6346834c3f50e8fc4a59a2ca6d5319ad0 F test/fts4content.test 1518195a9f92b711d94419f76409a31cc78755854fb0abb1da2b74b9e0cf843e F test/fts4docid.test e33c383cfbdff0284685604d256f347a18fdbf01 F test/fts4growth.test 289833c34ad45a5e6e6133b53b6a71647231fb89d36ddcb8d9c87211b6721d7f @@ -947,13 +947,13 @@ F test/fts4growth2.test 13ad4e76451af6e6906c95cdc725d01b00044269 F test/fts4incr.test 4e353a0bd886ea984e56fce9e77724fc923b8d0d F test/fts4langid.test 2168ba330af34f8a1c8832de0aab4c4b6fa195a16419c9c0c8aad59ceb6ff714 F test/fts4lastrowid.test 185835895948d5325c7710649824042373b2203149abe8024a9319d25234dfd7 -F test/fts4merge.test 970d20bb089985a075a8b39017a6cc3a7156fa8331db409cb70498c573352f90 +F test/fts4merge.test 1096e30b58ad616bd502141bfe5bfe4c3a518df89e958d41a5ed1ce322369b9c F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891 F test/fts4merge3.test 8d9ccb4a3d41c4c617a149d6c4b13ad02de797d0 F test/fts4merge4.test d895b1057a7798b67e03455d0fa50e9ea836c47b F test/fts4noti.test 5553d7bb2e20bf4a06b23e849352efc022ce6309 F test/fts4onepass.test d69ddc4ee3415e40b0c5d1d0408488a87614d4f63ba9c44f3e52db541d6b7cc7 -F test/fts4opt.test f67e6a6da9f3290949c2ad07faca73caf6ba23c006afbfa37e8d6d1acd988c62 +F test/fts4opt.test 0fd0cc84000743ff2a883b9b84b4a5be07249f0ba790c8848a757164cdd46b2a F test/fts4unicode.test ceca76422abc251818cb25dabe33d3c3970da5f7c90e1540f190824e6b3a7c95 F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d F test/func.test 09dda479bcfc568f99f3070413e9672a8eeedc1be9c5d819bf55d4788c2583b7 @@ -1006,9 +1006,9 @@ F test/incrvacuum.test b729aab1d4983037da57e66c20dfd7458561a85626dcf824f60175e35 F test/incrvacuum2.test 7d26cfda66c7e55898d196de54ac4ec7d86a4e3d F test/incrvacuum3.test 75256fb1377e7c39ef2de62bfc42bbff67be295a F test/incrvacuum_ioerr.test 6ae2f783424e47a0033304808fe27789cf93e635 -F test/index.test 5131c0106a6d0c892c5f438f0630e1b4361370c393ba8a000dd0dcaa2b3bf1de +F test/index.test df4cddf4435314a948237fdfa9acee67de21f7bebc789beab4b89b575b4f6a70 F test/index2.test f835d5e13ca163bd78c4459ca15fd2e4ed487407 -F test/index3.test 81bc47890b8abfb181bc35f8d10b56c069803386 +F test/index3.test 51685f39345462b84fcf77eb8537af847fdf438cc96b05c45d6aaca4e473ade0 F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6 F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7 F test/index6.test d07ea75b8c21f125c6f325522e8df8c05c91e9251ec923a31d0582b2ba4a617d @@ -1112,16 +1112,16 @@ F test/minmax.test 6751e87b409fe11b02e70a306d846fa544e25a41 F test/minmax2.test dae92964ac87c1d2ef978c582e81a95e11c00f1cbef68980bfb2abaf10315063 F test/minmax3.test cc1e8b010136db0d01a6f2a29ba5a9f321034354 F test/minmax4.test 936941484ebdceb8adec7c86b6cd9b6e5e897c1f -F test/misc1.test 704ea2cc7e7b9deb622b37953f0e77d0879826e8c3bfc1d7a691528035405061 +F test/misc1.test c8cfd1c3f842b3341fda9d81a96236d5c76ca89973aeff3fe50bac6fefcfc421 F test/misc2.test 00d7de54eda90e237fc9a38b9e5ccc769ebf6d4d F test/misc3.test cf3dda47d5dda3e53fc5804a100d3c82be736c9d -F test/misc4.test 0d8be3466adf123a7791a66ba2bc8e8d229e87f3 -F test/misc5.test 60e1fc758a93cacd19eb2fafcd1d40d150a05047546c7a92389c98047d621901 +F test/misc4.test 10cd6addb2fa9093df4751a1b92b50440175dd5468a6ec84d0386e78f087db0e +F test/misc5.test c4aeaa0fa28faa08f2485309c38db4719e6cd1364215d5687a5b96d340a3fa58 F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91 F test/misc7.test 349855706310f0de6b91645d199f6874f518627fd057743fa4e3689b60d06efc F test/misc8.test 8fb0f31d7a8aed484d759773ab8ad12ec746a477f4a67394a4af0e677494c3ca F test/misuse.test 9e7f78402005e833af71dcab32d048003869eca5abcaccc985d4f8dc1d86bcc7 -F test/mjournal.test 9d86e697dcbc5da2c4e8caba9b176b5765fe65e80c88c278b8c09a917e436795 +F test/mjournal.test 28a08d5cb5fb5b5702a46e19176e45e964e0800d1f894677169e79f34030e152 F test/mmap1.test fb04e0c10492455007624ade884ca0c8852ff3e4e11d95408f9709ca2ef7f626 F test/mmap2.test 9d6dd9ddb4ad2379f29cc78f38ce1e63ed418022 F test/mmap3.test b3c297e78e6a8520aafcc1a8f140535594c9086e @@ -1141,7 +1141,7 @@ F test/normalize.test 6a80564d2000702b5919ed2c1069fef0f95762142bc96a71b4c124a845 F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934 -F test/notnull.test b6999231221df3534827e45e2005dd7a815fdd5f2c2e1afb9be21ead410816f8 +F test/notnull.test a37b663d5bb728d66fc182016613fb8e4a0a4bbf3d75b8876a7527f7d4ed3f18 F test/null.test 0dcce4f04284ec66108c503327ad6d224c0752b3 F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1 F test/numindex1.test 20a5450d4b056e48cd5db30e659f13347a099823 @@ -1163,7 +1163,7 @@ F test/oserror.test e7b3416be4b9d5dd2fe0b42dd394daaddbb6c83eeec1f0e47b120b53e0ad F test/ossfuzz.c c4c4547e2c92ac52f10038b073a03248251a23c1c559728f63a18aeca0e79f03 F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17 F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f -F test/pager1.test a32ce299ed01ffb06e84a3af467ae1f3389786b316f40c4359f442c79144736b +F test/pager1.test 1e9ee778bdeaf4f7f09997d029cdaca6a42dfc2092edafe4f5e590acbf1eab13 F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71 F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370 F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e @@ -1172,13 +1172,13 @@ F test/pagerfault2.test caf4c7facb914fd3b03a17b31ae2b180c8d6ca1f F test/pagerfault3.test 1003fcda009bf48a8e22a516e193b6ef0dd1bbd8 F test/pageropt.test 84e4cc5cbca285357f7906e99b21be4f2bf5abc0 F test/pagesize.test 5769fc62d8c890a83a503f67d47508dfdc543305 -F test/parser1.test 391b9bf9a229547a129c61ac345ed1a6f5eb1854 +F test/parser1.test 6ccdf5e459a5dc4673d3273dc311a7e9742ca952dd0551a6a6320d27035ce4b3 F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff F test/permutations.test 6316c8edc7ac2c5e1263102aa3022ad3b12ac599e4e3f5931a9c1be407c41ece F test/pg_common.tcl 301ac19c1a52fd55166d26db929b3b89165c634d52b5f8ad76ea8cb06960db30 -F test/pragma.test 7c8cfc328a1717a95663cf8edb06c52ddfeaf97bb0aee69ae7457132e8d39e7d +F test/pragma.test c267bf02742c823a191960895b3d52933cebd7beee26757d1ed694f213fcd867 F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f F test/pragma3.test 8300aa9c63cff1027006ca34bf413a148abbd6dcd471fa9a1ded322fe18c0df9 F test/pragma4.test 3046501bee2f652dc2a4f9c87781e2741361d6864439c8381aba6c3b774b335c @@ -1203,7 +1203,7 @@ F test/regexp1.test 497ea812f264d12b6198d6e50a76be4a1973a9d8 F test/regexp2.test 40e894223b3d6672655481493f1be12012f2b33c F test/reindex.test 44edd3966b474468b823d481eafef0c305022254 F test/releasetest.tcl c5b474f9880073fc3b69729ee05d5284653a9ee101af572204917d9dcb1d9015 x -F test/resetdb.test 684a6ffde5a5141bba79f3101981cc38dcfc3403f61e643b7b3aa68bef0b8408 +F test/resetdb.test 373a9eb8fcbd58bf87affec6a88c6353038f98a5d25be5ab75a0b9636c462a36 F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/rollback.test 06680159bc6746d0f26276e339e3ae2f951c64812468308838e0a3362d911eaa F test/rollback2.test bc868d57899dc6972e2b4483faae0e03365a0556941474eec487ae21d8d38bb6 @@ -1266,7 +1266,7 @@ F test/shared3.test ab693f9b6e156b8bfb2a0ad94f29fe69602a5d38 F test/shared4.test c75f476804e76e26bf6fa0e7b421fb0ca7d07558 F test/shared6.test 866bb4982c45ce216c61ded5e8fde4e7e2f3ffa9 F test/shared7.test a81e99f83e6c51b02ac99c96fb3a2a7b5978c956 -F test/shared8.test 00a07bf5e1337ecf72e94542bdefdc330d7a2538 +F test/shared8.test 933ed7d71f598bb6c7a8c192a3cd30f2562fdccf514df383798599c34ffa672f F test/shared9.test 5f2a8f79b4d6c7d107a01ffa1ed05ae7e6333e21 F test/sharedA.test 49d87ec54ab640fbbc3786ee3c01de94aaa482a3a9f834ad3fe92770eb69e281 F test/sharedB.test 16cc7178e20965d75278f410943109b77b2e645e @@ -1290,11 +1290,11 @@ F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5 F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2 F test/skipscan6.test 0b4cd1b4ac9f84d91454df513c99a4932fa07e8f27b8049bea605068b3e34ac7 F test/snapshot.test a504f2e7009f512ef66c719f0ea1c55a556bdaf1e1312c80a04d46fc1a3e9632 -F test/snapshot2.test 4fc84a0121e882d6980333bf14dfc1143dfb94f5afbb909c084977a945b45beb -F test/snapshot3.test d6ec952e437e5c06a293d0f5ec1be1b45771d46d93bccfb3818ca2617dcb11e7 -F test/snapshot4.test 0f7e6bd6f1370d112ee820c541d0dd0e7b8ab4ea77429e65106d81c9ad2185a6 +F test/snapshot2.test 8d6ff5dd9cc503f6e12d408a30409c3f9c653507b24408d9cd7195931c89bc54 +F test/snapshot3.test 8744313270c55f6e18574283553d3c5c5fe4c5970585663613a0e75c151e599b +F test/snapshot4.test d4e9347ef2fcabc491fc893506c7bbaf334da3be111d6eb4f3a97cc623b78322 F test/snapshot_fault.test 508ae6f211d4991e9ff3b5080aeb0a179bf6755138aabeac4bca8083044d895a -F test/snapshot_up.test 93fec2d847ec12e3bae0f6486da2abc965a606e099e4e870454045f5f56f71ba +F test/snapshot_up.test a0a29c4cf33475fcef07c3f8e64af795e24ab91b4cc68295863402a393cdd41c F test/soak.test 18944cf21b94a7fe0df02016a6ee1e9632bc4e8d095a0cb49d95e15d5cca2d5c F test/softheap1.test 843cd84db9891b2d01b9ab64cef3e9020f98d087 F test/sort.test c2adc635c2564241fefec0b3a68391ef6868fd3b @@ -1333,15 +1333,15 @@ F test/subtype1.test 7fe09496352f97053af1437150751be2d0a0cae8 F test/superlock.test ec94f0556b6488d97f71c79f9061ae08d9ab8f12 F test/swarmvtab.test 9a3fd5ab3e9b3c976ad1b3d7646aab725114f2ac26b59395d0778b33bab6cdaf F test/swarmvtab2.test c948cb2fdfc5b01d85e8f6d6504854202dc1a0782ab2a0ed61538f27cbd0aa5c -F test/swarmvtab3.test 6cb664669630fcec4102a09333e52068734858fd2761eee3b0465c14cdbcee29 -F test/swarmvtabfault.test 00aec54665909490f5c383f3cae3b5d18bd97c12490b429ff8752a3027acfa42 +F test/swarmvtab3.test 247aa38b6ebd2b99db2075847ae47e789ac34f1c2ab5c720dfcffd990004c544 +F test/swarmvtabfault.test 8a67a9f27c61073a47990829e92bc0c64420a807cb642b15a25f6c788210ed95 F test/symlink.test 0d816670325536b8973ec08d32b45136baddb80bd45fd178e0ce7a9e8153f3e7 F test/sync.test 89539f4973c010eda5638407e71ca7fddbcd8e0594f4c9980229f804d4333092 F test/sync2.test 8f9f7d4f6d5be8ca8941a8dadcc4299e558cb6a1ff653a9469146c7a76ef2039 F test/syscall.test a39d9a36f852ae6e4800f861bc2f2e83f68bbc2112d9399931ecfadeabd2d69d F test/sysfault.test c9f2b0d8d677558f74de750c75e12a5454719d04 F test/tabfunc01.test 54300134f76db817685194d2f0e63e3fbf7380b45e0d426e00a9aee752497cfb -F test/table.test b708f3e5fa2542fa51dfab21fc07b36ea445cb2f +F test/table.test eb3463b7add9f16a5bb836badf118cf391b809d09fdccd1f79684600d07ec132 F test/tableapi.test ecbcc29c4ab62c1912c3717c48ea5c5e59f7d64e4a91034e6148bd2b82f177f4 F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930 F test/tclsqlite.test dca8aa30d84175e7d8c8fc43d3ffa11fa56e23fbdac2679d03833a0f326edf34 @@ -1352,7 +1352,7 @@ F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30 F test/temptable2.test d2940417496e2b9548e01d09990763fbe88c316504033256d51493e1f1a5ce6a F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc -F test/tester.tcl be183110f88b2b18eb1d1c2ee4ffbc355cebdd89fa5e9953e7d5182db8638991 +F test/tester.tcl fa5656391e3b477508abe12b3b81f019b2e71397399ab38a2f32d8d7f3bf8e56 F test/thread001.test b61a29dd87cf669f5f6ac96124a7c97d71b0c80d9012746072055877055cf9ef F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@ -1522,14 +1522,14 @@ F test/trigger3.test aa640bb2bbb03edd5ff69c055117ea088f121945 F test/trigger4.test 74700b76ebf3947b2f7a92405141eb2cf2a5d359 F test/trigger5.test 619391a3e9fc194081d22cefd830d811e7badf83 F test/trigger6.test 0e411654f122552da6590f0b4e6f781048a4a9b9 -F test/trigger7.test 93cfa9b48ab9104b2b3d87bc544ac8021405643e36f23ee84635fbfaf9b8fef5 +F test/trigger7.test e7ce54bfda67a88d778aea42544e151c465547a7e617127b6914c2221a6d53c1 F test/trigger8.test 30cb0530bd7c4728055420e3f739aa00412eafa4 F test/trigger9.test 2226ec795a33b0460ab5cf8891e9054cc7edef41 F test/triggerA.test 837be862d8721f903dba3f3ceff05b32e0bee5214cf6ea3da5fadf12d3650e9d F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe F test/triggerC.test 302d8995f5ffe63bbc15053abb3ef7a39cf5a092 F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650 -F test/triggerE.test d9e9b364dfd527c84ac0de53045406325487feecb32888d482eca64421a50d99 +F test/triggerE.test ede2e4bce4ba802337bd69d39447fa04a938e06d84a8bfc53c76850fc36ed86d F test/triggerF.test 6a8c22bd058cf467f0c7d112afe87f7a8c579c0c4681b914b8f19020f48528a4 F test/triggerG.test d5caeef6144ede2426dd13211fd72248241ff2ebc68e12a4c0bf30f5faa21499 F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1 @@ -1540,8 +1540,8 @@ F test/tt3_vacuum.c 1753f45917699c9c1f66b64c717a717c9379f776 F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff F test/types2.test 1aeb81976841a91eef292723649b5c4fe3bc3cac F test/types3.test 99e009491a54f4dc02c06bdbc0c5eea56ae3e25a -F test/unionvtab.test 595fb601de00188ca5e7c6dbe266c17a0faf234cf434ce85eccec1a929ef9baf -F test/unionvtabfault.test 26b6854d5aef9005cd630513025690bff1b7378ae9c97b81e2a3cbe84eee0f58 +F test/unionvtab.test 5ae0f0b4f302a4c6bb310b64386f9ac6a4c1c271c08f31cc7c5d92722e2b2729 +F test/unionvtabfault.test e8759f3d14fb938ce9657e2342db34aeac0fb9bc1692b0d1ebb0069630151d06 F test/unique.test 93f8b2ef5ea51b9495f8d6493429b1fd0f465264 F test/unique2.test 3674e9f2a3f1fbbfd4772ac74b7a97090d0f77d2 F test/unixexcl.test d936ba2b06794018e136418addd59a2354eeae97 @@ -1566,7 +1566,7 @@ F test/vacuummem.test 7b42abb3208bd82dd23a7536588396f295a314f2 F test/varint.test bbce22cda8fc4d135bcc2b589574be8410614e62 F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661 F test/view.test 71e1bf4c0e2e0d37c84d7db5b33cd47eb4a7662c19d93ede4112b350b186f61f -F test/vtab1.test 8f91b9538d1404c3932293a588c4344218a0c94792d4289bb55e41020e7b3fff +F test/vtab1.test 60b4f70aafa6078d6fdfc11417af3bd216d7ef5eafce16707a6ca3dae5166d20 F test/vtab2.test 14d4ab26cee13ba6cf5c5601b158e4f57552d3b055cdd9406cf7f711e9c84082 F test/vtab3.test b45f47d20f225ccc9c28dc915d92740c2dee311e F test/vtab4.test 8e73ed268f3d596bc3590f45fc948fb40f28e9c3 @@ -1644,7 +1644,7 @@ F test/whereL.test 0a19fc44cd1122040f56c934f1b14d0ca85bde28f270268a428dd9796ea06 F test/wherefault.test 1374c3aa198388925246475f84ad4cd5f9528864 F test/wherelfault.test 9012e4ef5259058b771606616bd007af5d154e64cc25fa9fd4170f6411db44e3 F test/wherelimit.test 592081800806d297dd7449b1030c863d2883d6d42901837ccd2e5a9bd962edb0 -F test/wherelimit2.test be78ba3aa1831c6358fd7d5b9809bfd520f0c2a7d63a295e8f182e140ff137c3 +F test/wherelimit2.test 9bf0aa56cca40ea0e4c5e2915341355a2bbc0859ec4ce1589197fe2a9d94635f F test/wild001.test bca33f499866f04c24510d74baf1e578d4e44b1c F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2aeee74 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972 @@ -1657,9 +1657,9 @@ F test/window3.tcl 577a3b1ff913208e5248c04dab9df17fd760ce159a752789e26d0cb4a5f91 F test/window3.test e274b7f8952ca4ed25996e0e45c047192b066e0aaff2a822d4293c8c4f1d8d98 F test/window4.tcl 511425f6b0abf9b953df54cc9c7295cc7c25d78f4ed6f7a74b094eec0120eccb F test/window4.test c5d6bf3403e4ade2f19df2afe4c16f29fb817c392c6c1c8017edb7165c191a62 -F test/window5.test 8187f46597c90b73e8f96659e893353cbda337479cc582f7a488eab351ba08d3 +F test/window5.test d328dd18221217c49c144181975eea17339eaeaf0e9aa558cee3afb84652821e F test/window6.test 5eae4ae7a590ccf1e605880969ca0bad3955616ac91cad3031baea38748badb3 -F test/windowfault.test 23abad97b72c6f609002255ddd41ef5c8922408f918f9b98ad6005ab316e482f +F test/windowfault.test 12ceb6bbb355d13e8fcd88c5731a57256dfdf77b9a7ae20842a76fcd4623df5b F test/with1.test 2465d98ffce80d00553ac7135697c18b0369275b6ecc750daa2af320b8c812ca F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab F test/with3.test 5e8ce2c585170bbbc0544e2a01a4941fa0be173ba5265e5c92eb588cd99a232d @@ -1676,7 +1676,7 @@ F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501d F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa F test/zerodamage.test 9c41628db7e8d9e8a0181e59ea5f189df311a9f6ce99cc376dc461f66db6f8dc F test/zipfile.test a61f6ba6dbaaf4983849df84a31df140c7ddd1362e2fa9ecd3cdf5cd123b7f18 -F test/zipfile2.test 8a18965530258140ce301b2c2f4245bc505ffead2e17a97fa34c7ace379ea5e0 +F test/zipfile2.test 9903388a602a3834189857a985106ff95c3bba6a3969e0134127df991889db5d F test/zipfilefault.test 44d4d7a7f7cca7521d569d7f71026b241d65a6b1757aa409c1a168827edbbc2c F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5 F tool/GetTclKit.bat 8995df40c4209808b31f24de0b58f90930239a234f7591e3675d45bfbb990c5d @@ -1692,7 +1692,7 @@ F tool/fast_vacuum.c 5ba0d6f5963a0a63bdc42840f678bad75b2ebce1 F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439 F tool/fuzzershell.c e1d90a03ca790d7c331c2aae08ca46ff435f1ae1faa6cb9cc48f4687c18fdc6e F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4 -F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5 +F tool/genfkey.test b6afd7b825d797a1e1274f519ab5695373552ecad5cd373530c63533638a5a4f F tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce F tool/kvtest-speed.sh 4761a9c4b3530907562314d7757995787f7aef8f F tool/lemon.c 60d1e1eb0f7ebae709f68f1472d77fbf291c5345cd98ff417219da7e74fd09e9 @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 1c1d24edbb732f2a2002a741c7a7afdd010b67e1b5e6d90ff36c6428897e7612 -R a090d326d91e2064f2a8ccd8efbcd9e3 +P a1d6c6712c3304fd736077432c8c180692cf7d79be7f3a073510b6dab0eb951f +R cb36d8dda9734209d36a0bde1f638cf3 U drh -Z c4bb3ba9c94194a36c5c09b3778b92b6 +Z 1e5f08b2aab8b0879ab6cd66d89a54de diff --git a/manifest.uuid b/manifest.uuid index 5b096513f2..bd36e9a206 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a1d6c6712c3304fd736077432c8c180692cf7d79be7f3a073510b6dab0eb951f \ No newline at end of file +3212733cb6d1a59516d67a86df7c7b1d2456a1b2e5d7080c26b0e87b2609c65d \ No newline at end of file diff --git a/src/main.c b/src/main.c index 01d8bca861..1e55983932 100644 --- a/src/main.c +++ b/src/main.c @@ -3062,6 +3062,9 @@ static int openDatabase( #endif #if defined(SQLITE_ENABLE_QPSG) | SQLITE_EnableQPSG +#endif +#if defined(SQLITE_DEFAULT_DEFENSIVE) + | SQLITE_Defensive #endif ; sqlite3HashInit(&db->aCollSeq); diff --git a/test/alter2.test b/test/alter2.test index 14be637f97..aae0061ad4 100644 --- a/test/alter2.test +++ b/test/alter2.test @@ -64,6 +64,7 @@ proc alter_table {tbl sql {file_format 2}} { sqlite3 dbat test.db set s [string map {' ''} $sql] set t [string map {' ''} $tbl] + sqlite3_db_config dbat DEFENSIVE 0 dbat eval [subst { PRAGMA writable_schema = 1; UPDATE sqlite_master SET sql = '$s' WHERE name = '$t' AND type = 'table'; @@ -91,6 +92,7 @@ do_test alter2-1.0 { #----------------------------------------------------------------------- # Some basic tests to make sure short rows are handled. # +sqlite3_db_config db DEFENSIVE 0 do_test alter2-1.1 { execsql { CREATE TABLE abc(a, b); diff --git a/test/altercol.test b/test/altercol.test index 39b0b15776..d8a14b2037 100644 --- a/test/altercol.test +++ b/test/altercol.test @@ -553,6 +553,7 @@ do_execsql_test 13.1.3 { SELECT sql FROM sqlite_master WHERE name='x1i'; } {{CREATE INDEX x1i ON x1(i)}} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 13.1.4 { PRAGMA writable_schema = 1; UPDATE sqlite_master SET sql = 'CREATE INDEX x1i ON x1(j)' WHERE name='x1i'; diff --git a/test/alterlegacy.test b/test/alterlegacy.test index 9f7777670d..47d8bcfba9 100644 --- a/test/alterlegacy.test +++ b/test/alterlegacy.test @@ -467,4 +467,3 @@ do_execsql_test 14.6 { finish_test - diff --git a/test/altertab.test b/test/altertab.test index 819aa67201..5f2b746c19 100644 --- a/test/altertab.test +++ b/test/altertab.test @@ -505,4 +505,3 @@ do_execsql_test 15.5 { finish_test - diff --git a/test/altertab2.test b/test/altertab2.test index 5656def81a..ce689df4ec 100644 --- a/test/altertab2.test +++ b/test/altertab2.test @@ -43,4 +43,3 @@ ifcapable fts5 { finish_test - diff --git a/test/analyze.test b/test/analyze.test index f3293b2917..683542f127 100644 --- a/test/analyze.test +++ b/test/analyze.test @@ -350,6 +350,7 @@ ifcapable stat4||stat3 { # in the series. # do_test analyze-5.99 { + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema=on; UPDATE sqlite_master SET sql='nonsense' WHERE name='sqlite_stat1'; diff --git a/test/autoinc.test b/test/autoinc.test index 75b16daa10..bc757319f8 100644 --- a/test/autoinc.test +++ b/test/autoinc.test @@ -697,6 +697,7 @@ do_test autoinc-12.1 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE fake_sequence(name TEXT PRIMARY KEY,seq) WITHOUT ROWID; PRAGMA writable_schema=on; @@ -718,6 +719,7 @@ do_test autoinc-12.2 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b TEXT); INSERT INTO t1(b) VALUES('one'); @@ -744,6 +746,7 @@ do_test autoinc-12.3 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b TEXT); INSERT INTO t1(b) VALUES('one'); @@ -772,6 +775,7 @@ do_test autoinc-12.4 { WHERE name='sqlite_sequence'}] set root2 [db one {SELECT rootpage FROM sqlite_master WHERE name='fake'}] + sqlite3_db_config db DEFENSIVE 0 db eval { PRAGMA writable_schema=on; UPDATE sqlite_master SET rootpage=$root2 @@ -791,6 +795,7 @@ do_test autoinc-12.5 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b TEXT); INSERT INTO t1(b) VALUES('one'); @@ -810,6 +815,7 @@ do_test autoinc-12.6 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b TEXT); INSERT INTO t1(b) VALUES('one'); @@ -831,6 +837,7 @@ do_test autoinc-12.7 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b TEXT); INSERT INTO t1(b) VALUES('one'); diff --git a/test/bestindex5.test b/test/bestindex5.test index ea93a47662..f7334653dc 100644 --- a/test/bestindex5.test +++ b/test/bestindex5.test @@ -247,4 +247,3 @@ do_execsql_test 3.5 { SELECT rowid, * FROM t4 WHERE rowid!=1 OR x!='245'; } {} finish_test - diff --git a/test/capi3.test b/test/capi3.test index 4950ef245e..40d87ac8e3 100644 --- a/test/capi3.test +++ b/test/capi3.test @@ -741,6 +741,7 @@ if {![sqlite3 -has-codec]} { } {} do_test capi3-8.2 { sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema=ON; INSERT INTO sqlite_master VALUES(NULL,NULL,NULL,NULL,NULL); @@ -759,6 +760,7 @@ if {![sqlite3 -has-codec]} { db close forcedelete test.db test.db-journal sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 execsql { CREATE TABLE t1(a); PRAGMA writable_schema=ON; diff --git a/test/capi3c.test b/test/capi3c.test index c275242459..889ecbe859 100644 --- a/test/capi3c.test +++ b/test/capi3c.test @@ -686,6 +686,7 @@ if {![sqlite3 -has-codec]} { } {} do_test capi3c-8.2 { sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema=ON; INSERT INTO sqlite_master VALUES(NULL,NULL,NULL,NULL,NULL); @@ -704,6 +705,7 @@ if {![sqlite3 -has-codec]} { db close forcedelete test.db test.db-journal sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 execsql { CREATE TABLE t1(a); PRAGMA writable_schema=ON; diff --git a/test/corrupt5.test b/test/corrupt5.test index 3f5099630e..75097668c7 100644 --- a/test/corrupt5.test +++ b/test/corrupt5.test @@ -33,6 +33,7 @@ ifcapable !pager_pragmas { # Create a database with a freelist containing at least two pages. # do_test corrupt5-1.1 { + sqlite3_db_config db DEFENSIVE 0 execsql { CREATE TABLE t1(a,b,c); CREATE INDEX i1 ON t1(a,b); diff --git a/test/corruptI.test b/test/corruptI.test index cdcb94201e..12ce446540 100644 --- a/test/corruptI.test +++ b/test/corruptI.test @@ -222,6 +222,7 @@ do_execsql_test 7.0 { INSERT INTO t1 VALUES('c', 'A'); SELECT name FROM sqlite_master; } {t1 sqlite_autoindex_t1_1} +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 7.1 { PRAGMA writable_schema = 1; DELETE FROM sqlite_master WHERE name = 'sqlite_autoindex_t1_1'; diff --git a/test/corruptK.test b/test/corruptK.test index 1694db1747..ad5b9a4718 100644 --- a/test/corruptK.test +++ b/test/corruptK.test @@ -143,7 +143,7 @@ if {[permutation]!="inmemory_journal"} { CREATE TABLE t4(a, b, c); CREATE TABLE t5(a, b, c); } - + sqlite3_db_config db DEFENSIVE 0 do_execsql_test 3.2 { UPDATE sqlite_dbpage SET data = hex2blob(' 000: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. diff --git a/test/countofview.test b/test/countofview.test index aebd6ed8e5..5f892ee274 100644 --- a/test/countofview.test +++ b/test/countofview.test @@ -41,4 +41,3 @@ do_execsql_test 1.3 { } {3} finish_test - diff --git a/test/dbpage.test b/test/dbpage.test index 754bc17926..288af89310 100644 --- a/test/dbpage.test +++ b/test/dbpage.test @@ -21,6 +21,7 @@ ifcapable !vtab||!compound { return } +sqlite3_db_config db DEFENSIVE 0 do_test 100 { execsql { PRAGMA auto_vacuum=0; diff --git a/test/e_reindex.test b/test/e_reindex.test index c6a9e0352f..00291b76a6 100644 --- a/test/e_reindex.test +++ b/test/e_reindex.test @@ -44,6 +44,7 @@ do_reindex_tests e_reindex-0.1 { # Test this by corrupting some database indexes, running REINDEX, and # observing that the corruption is gone. # +sqlite3_db_config db DEFENSIVE 0 do_execsql_test e_reindex-1.1 { INSERT INTO t1 VALUES(1, 2); INSERT INTO t1 VALUES(3, 4); @@ -57,6 +58,7 @@ do_execsql_test e_reindex-1.1 { db close sqlite3 db test.db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test e_reindex-1.2 { DELETE FROM t1 WHERE a = 3; INSERT INTO t1 VALUES(7, 8); diff --git a/test/fts3auto.test b/test/fts3auto.test index f2378ded36..4abf06ff98 100644 --- a/test/fts3auto.test +++ b/test/fts3auto.test @@ -140,7 +140,6 @@ proc fts3_zero_long_segments {tbl limit} { SET block = zeroblob(length(block)) WHERE length(block)>$limit " - sqlite3_db_config db DEFENSIVE 1 return [db changes] } diff --git a/test/fts3cov.test b/test/fts3cov.test index 735d501679..95269a6b0b 100644 --- a/test/fts3cov.test +++ b/test/fts3cov.test @@ -103,7 +103,6 @@ do_error_test fts3cov-2.3 { do_test fts3cov-2.4 { execsql { INSERT INTO t1_segments VALUES($left_child, NULL) } } {} -sqlite3_db_config db DEFENSIVE 1 do_error_test fts3cov-2.5 { SELECT * FROM t1 WHERE t1 MATCH 'cloud' } {SQL logic error} diff --git a/test/fts3d.test b/test/fts3d.test index 4ba5488865..b0547ce7ab 100644 --- a/test/fts3d.test +++ b/test/fts3d.test @@ -304,7 +304,6 @@ do_test fts3d-5.1 { SELECT level, idx FROM t1_segdir ORDER BY level, idx; } } {{Index already optimal} 2 0} -sqlite3_db_config db DEFENSIVE 1 # ALTER TABLE RENAME should work regardless of the database encoding. diff --git a/test/fts3defer.test b/test/fts3defer.test index fb54c48b35..5d8395afc1 100644 --- a/test/fts3defer.test +++ b/test/fts3defer.test @@ -66,7 +66,6 @@ do_execsql_test 1.3 { SET block = zeroblob(length(block)) WHERE length(block)>10000; } {1} -sqlite3_db_config db DEFENSIVE 1 do_select_tests 1.4 $tests @@ -229,7 +228,6 @@ foreach {tn setup} { add_empty_records 1000 sqlite3_db_config db DEFENSIVE 0 execsql $zero_long_doclists - sqlite3_db_config db DEFENSIVE 1 } 4 { set dmt_modes 0 @@ -239,7 +237,6 @@ foreach {tn setup} { execsql "INSERT INTO t1(t1) VALUES('optimize')" sqlite3_db_config db DEFENSIVE 0 execsql $zero_long_doclists - sqlite3_db_config db DEFENSIVE 1 } 5 { set dmt_modes 0 @@ -248,7 +245,6 @@ foreach {tn setup} { add_empty_records 1000 sqlite3_db_config db DEFENSIVE 0 execsql $zero_long_doclists - sqlite3_db_config db DEFENSIVE 1 } } { diff --git a/test/fts3defer2.test b/test/fts3defer2.test index b3f808dea8..46b62b9017 100644 --- a/test/fts3defer2.test +++ b/test/fts3defer2.test @@ -51,7 +51,6 @@ do_execsql_test 1.1.4 { SELECT count(*) FROM t1_segments WHERE length(block)>10000; UPDATE t1_segments SET block = zeroblob(length(block)) WHERE length(block)>10000; } {2} -sqlite3_db_config db DEFENSIVE 1 do_execsql_test 1.2.0 { SELECT content FROM t1 WHERE t1 MATCH 'f (e a)'; @@ -102,7 +101,6 @@ foreach {tn sql} { } { sqlite3_db_config db DEFENSIVE 0 execsql $sql - sqlite3_db_config db DEFENSIVE 1 do_execsql_test 2.2.$tn.1 { SELECT mit(matchinfo(t2, 'pcxnal')) FROM t2 WHERE t2 MATCH 'a b'; @@ -158,7 +156,6 @@ foreach {tn sql} { } { sqlite3_db_config db DEFENSIVE 0 execsql $sql - sqlite3_db_config db DEFENSIVE 1 do_execsql_test 2.4.$tn { SELECT docid, mit(matchinfo(t3, 'pcxnal')) FROM t3 WHERE t3 MATCH '"a b c"'; } {1 {1 1 1 4 4 11 912 6} 3 {1 1 1 4 4 11 912 6}} diff --git a/test/fts3matchinfo.test b/test/fts3matchinfo.test index 416a53f626..af0b1cdc0d 100644 --- a/test/fts3matchinfo.test +++ b/test/fts3matchinfo.test @@ -284,7 +284,6 @@ ifcapable fts4_deferred { SET block = zeroblob(length(block)) WHERE length(block)>10000; } - sqlite3_db_config db DEFENSIVE 1 } do_matchinfo_test 4.4.2 t5 {t5 MATCH 'a b'} { s {2} } @@ -346,7 +345,6 @@ do_catchsql_test 6.2 { UPDATE t9_content SET c0content = 'this record is used to'; SELECT offsets(t9) FROM t9 WHERE t9 MATCH 'to'; } {1 {database disk image is malformed}} -sqlite3_db_config db DEFENSIVE 1 #------------------------------------------------------------------------- # Test the outcome of matchinfo() when used within a query that does not @@ -411,7 +409,6 @@ do_execsql_test 8.4.3.1 { UPDATE t11_stat SET value = NULL; } do_catchsql_test 8.5.3.2 { SELECT mit(matchinfo(t11, 'nxa')) FROM t11 WHERE t11 MATCH 'a*' } {1 {database disk image is malformed}} -sqlite3_db_config db DEFENSIVE 1 #------------------------------------------------------------------------- do_execsql_test 8.1 { diff --git a/test/fts3query.test b/test/fts3query.test index 13072dd860..ca3ee6695a 100644 --- a/test/fts3query.test +++ b/test/fts3query.test @@ -169,7 +169,6 @@ do_select_tests 5.3 -errorformat { } sqlite3_db_config db DEFENSIVE 0 do_execsql_test 5.4.0 { UPDATE t2_content SET c0content = X'1234' } -sqlite3_db_config db DEFENSIVE 1 do_select_tests 5.4 -errorformat { illegal first argument to %s } { diff --git a/test/fts3snippet.test b/test/fts3snippet.test index ff66ec6fcc..4a0b7873d5 100644 --- a/test/fts3snippet.test +++ b/test/fts3snippet.test @@ -186,7 +186,6 @@ foreach {DO_MALLOC_TEST enc} { # Test a corruption case: sqlite3_db_config db DEFENSIVE 0 execsql { UPDATE ft_content SET c1b = 'hello world' WHERE c1b = $numbers } - sqlite3_db_config db DEFENSIVE 1 do_error_test $T.2.3 { SELECT offsets(ft) FROM ft WHERE ft MATCH 'onehundred' } {database disk image is malformed} diff --git a/test/fts4check.test b/test/fts4check.test index 49d1f00d8b..c94c35910b 100644 --- a/test/fts4check.test +++ b/test/fts4check.test @@ -68,7 +68,6 @@ foreach {tn disruption} { } { sqlite3_db_config db DEFENSIVE 0 do_execsql_test 1.2.1.$tn "BEGIN; $disruption" - sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 1.2.2.$tn { INSERT INTO t1 (t1) VALUES('integrity-check') } {1 {database disk image is malformed}} @@ -104,7 +103,6 @@ foreach {tn disruption} { } { sqlite3_db_config db DEFENSIVE 0 do_execsql_test 2.2.1.$tn "BEGIN; $disruption" - sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 2.2.2.$tn { INSERT INTO t2 (t2) VALUES('integrity-check') } {1 {database disk image is malformed}} @@ -151,7 +149,6 @@ foreach {tn disruption} { } { sqlite3_db_config db DEFENSIVE 0 do_execsql_test 3.2.1.$tn "BEGIN; $disruption" - sqlite3_db_config db DEFENSIVE 1 do_catchsql_test 3.2.2.$tn { INSERT INTO t3 (t3) VALUES('integrity-check') } {1 {database disk image is malformed}} diff --git a/test/fts4merge.test b/test/fts4merge.test index 6ea9923201..48661afd71 100644 --- a/test/fts4merge.test +++ b/test/fts4merge.test @@ -162,7 +162,6 @@ foreach mod {fts3 fts4} { INSERT INTO t4(t4) VALUES('merge=1,12'); SELECT level, group_concat(idx, ' ') FROM t4_segdir GROUP BY level; } "0 {0 1 2 3 4 5} 1 0" - sqlite3_db_config db DEFENSIVE 1 #------------------------------------------------------------------------- diff --git a/test/fts4opt.test b/test/fts4opt.test index 3910865d6b..4b3d003239 100644 --- a/test/fts4opt.test +++ b/test/fts4opt.test @@ -59,7 +59,6 @@ proc prepare_for_optimize {db tbl} { COMMIT; }] - sqlite3_db_config $db DEFENSIVE 1 } do_test 1.1 { diff --git a/test/index.test b/test/index.test index 124b122e00..ae16470570 100644 --- a/test/index.test +++ b/test/index.test @@ -626,7 +626,6 @@ do_test index-18.1 { } } {1 {object name reserved for internal use: sqlite_t1}} do_test index-18.1.2 { - sqlite3_db_config db DEFENSIVE 1 catchsql { CREATE TABLE sqlite_t1(a, b, c); } diff --git a/test/index3.test b/test/index3.test index 4c00a852d2..6100f48573 100644 --- a/test/index3.test +++ b/test/index3.test @@ -83,6 +83,7 @@ do_execsql_test index3-2.5 { # in the series. # do_test index3-99.1 { + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema=on; UPDATE sqlite_master SET sql='nonsense' WHERE name='t1d' diff --git a/test/misc1.test b/test/misc1.test index 05b1b1980f..9ac52e4626 100644 --- a/test/misc1.test +++ b/test/misc1.test @@ -659,6 +659,7 @@ do_execsql_test misc1-22.1 { # db close sqlite3 db :memory: +sqlite3_db_config db DEFENSIVE 0 do_execsql_test misc1-23.1 { CREATE TABLE t1(x); PRAGMA writable_schema=ON; @@ -674,6 +675,7 @@ do_execsql_test misc1-23.1 { db close database_may_be_corrupt sqlite3 db :memory: +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test misc1-23.2 { CREATE TABLE t1(x UNIQUE); PRAGMA writable_schema=ON; @@ -685,6 +687,7 @@ do_catchsql_test misc1-23.2 { } {1 {no such table: F}} db close sqlite3 db :memory: +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test misc1-23.3 { CREATE TABLE t1(x UNIQUE); PRAGMA writable_schema=ON; diff --git a/test/misc4.test b/test/misc4.test index 79e756ec63..3d391882c3 100644 --- a/test/misc4.test +++ b/test/misc4.test @@ -212,6 +212,7 @@ do_test misc4-6.2 { # db close sqlite3 db :memory: +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test misc4-7.1 { CREATE TABLE t7(x); PRAGMA writable_schema=ON; diff --git a/test/misc5.test b/test/misc5.test index 881aba1cd8..f7c6048d97 100644 --- a/test/misc5.test +++ b/test/misc5.test @@ -590,6 +590,7 @@ do_test misc5-7.1 { # do_test misc5-7.2 { sqlite3 db2 :memory: + sqlite3_db_config db2 DEFENSIVE 0 catchsql { CREATE TABLE t1(x UNIQUE); PRAGMA writable_schema=ON; diff --git a/test/mjournal.test b/test/mjournal.test index 539ebc6946..7aaa86bae0 100644 --- a/test/mjournal.test +++ b/test/mjournal.test @@ -160,4 +160,3 @@ do_hasmj_test 2.3 { } {0} finish_test - diff --git a/test/notnull.test b/test/notnull.test index 32d95eaf24..23abe31f28 100644 --- a/test/notnull.test +++ b/test/notnull.test @@ -606,4 +606,3 @@ do_uses_op_next_test notnull-6.9 "SELECT * FROM t8 WHERE a IS ?" 0 do_uses_op_next_test notnull-6.10 "SELECT * FROM t8 WHERE a IS ?" 0 finish_test - diff --git a/test/pager1.test b/test/pager1.test index 1d56fad30b..8216b467ed 100644 --- a/test/pager1.test +++ b/test/pager1.test @@ -1879,6 +1879,7 @@ do_test pager1-18.1 { do_test pager1-18.2 { set root [db one "SELECT rootpage FROM sqlite_master"] set lockingpage [expr (0x10000/1024) + 1] + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema = 1; UPDATE sqlite_master SET rootpage = $lockingpage; @@ -1931,6 +1932,7 @@ do_test pager1-18.4 { db2 close do_test pager1-18.5 { sqlite3 db "" + sqlite3_db_config db DEFENSIVE 0 execsql { CREATE TABLE t1(a, b); CREATE TABLE t2(a, b); diff --git a/test/parser1.test b/test/parser1.test index c708dded1f..ad95b49091 100644 --- a/test/parser1.test +++ b/test/parser1.test @@ -28,6 +28,7 @@ do_catchsql_test parser1-1.1 { # COLLATE, ASC, and DESC keywords on the id list of a FK constraint, and that # those keywords are silently ignored. # +sqlite3_db_config db DEFENSIVE 0 do_execsql_test parser1-1.2 { CREATE TABLE t1( a TEXT PRIMARY KEY, diff --git a/test/pragma.test b/test/pragma.test index 90cd7e2dfe..1528984654 100644 --- a/test/pragma.test +++ b/test/pragma.test @@ -497,6 +497,7 @@ Page 6 is never used} {row 1 missing from index i2}} # Verify that PRAGMA integrity_check catches UNIQUE and NOT NULL # constraint violations. # +sqlite3_db_config db DEFENSIVE 0 do_execsql_test pragma-3.20 { CREATE TABLE t1(a,b); CREATE INDEX t1a ON t1(a); diff --git a/test/resetdb.test b/test/resetdb.test index ab52d7dd38..de2dfcffa3 100644 --- a/test/resetdb.test +++ b/test/resetdb.test @@ -65,6 +65,7 @@ do_test 110 { do_test 200 { # Thoroughly corrupt the database file by overwriting the first # page with randomness. + sqlite3_db_config db DEFENSIVE 0 catchsql { UPDATE sqlite_dbpage SET data=randomblob(4096) WHERE pgno=1; PRAGMA quick_check; @@ -125,6 +126,7 @@ do_test 310 { } {210 26000 ok wal 8192 12} # Corrupt the database again +sqlite3_db_config db DEFENSIVE 0 do_catchsql_test 320 { UPDATE sqlite_dbpage SET data=randomblob(8192) WHERE pgno=1; PRAGMA quick_check @@ -228,6 +230,7 @@ if {[nonzero_reserved_bytes]} { return } +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 710 { UPDATE sqlite_dbpage SET data= X'53514C69746520666F726D61742033000200030100402020000000000000001300000000000000000000000300000004000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000D00000003017C0001D801AC017C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E03061715110145696E6465787431626374310443524541544520494E4445582074316263204F4E20743128622C63292A0206171311013F696E64657874316174310343524541544520494E44455820743161204F4E20743128612926010617111101397461626C657431743102435245415445205441424C4520743128612C622C6329' WHERE pgno=1; diff --git a/test/shared8.test b/test/shared8.test index 73f0d47627..f9607262b4 100644 --- a/test/shared8.test +++ b/test/shared8.test @@ -62,6 +62,7 @@ do_test 1.0 { } {1 i 2 ii 3 iii 4 iv} do_test 1.1 { + sqlite3_db_config db1 DEFENSIVE 0 execsql { PRAGMA writable_schema = 1; DELETE FROM sqlite_master WHERE 1; diff --git a/test/snapshot2.test b/test/snapshot2.test index 0f0e63961f..0f4f177cb3 100644 --- a/test/snapshot2.test +++ b/test/snapshot2.test @@ -238,4 +238,3 @@ do_test 5.4 { finish_test - diff --git a/test/snapshot3.test b/test/snapshot3.test index 8c330d7cbf..4dca202b1c 100644 --- a/test/snapshot3.test +++ b/test/snapshot3.test @@ -97,4 +97,3 @@ do_test 1.8 { } {1 SQLITE_ERROR_SNAPSHOT} finish_test - diff --git a/test/snapshot4.test b/test/snapshot4.test index 90a8d254e7..ac7f6ad6c2 100644 --- a/test/snapshot4.test +++ b/test/snapshot4.test @@ -72,4 +72,3 @@ do_test 1.4 { finish_test - diff --git a/test/snapshot_up.test b/test/snapshot_up.test index 651a92ac64..de8e5afab4 100644 --- a/test/snapshot_up.test +++ b/test/snapshot_up.test @@ -181,4 +181,3 @@ sqlite3_snapshot_free $::snap1 sqlite3_snapshot_free $::snap2 finish_test - diff --git a/test/swarmvtab3.test b/test/swarmvtab3.test index 6e52355d95..b062f9e952 100644 --- a/test/swarmvtab3.test +++ b/test/swarmvtab3.test @@ -231,4 +231,3 @@ forcedelete {*}[glob test.db*] forcedelete {*}[glob test_remote.db*] finish_test - diff --git a/test/swarmvtabfault.test b/test/swarmvtabfault.test index 083d80df2e..8cca3b2744 100644 --- a/test/swarmvtabfault.test +++ b/test/swarmvtabfault.test @@ -63,4 +63,3 @@ do_faultsim_test 1.1 -faults oom* -prep { } finish_test - diff --git a/test/table.test b/test/table.test index e24e3b9ed4..7be6b37695 100644 --- a/test/table.test +++ b/test/table.test @@ -276,6 +276,7 @@ do_test table-5.2.2 { db close forcedelete test.db sqlite3 db test.db + sqlite3_db_config db DEFENSIVE 0 db eval { CREATE TABLE t0(a,b); CREATE INDEX t ON t0(a); diff --git a/test/tester.tcl b/test/tester.tcl index f1847e83b9..14808d9cd9 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -129,7 +129,6 @@ if {[info command sqlite_orig]==""} { set ::dbhandle [lindex $args 0] uplevel #0 $::G(perm:dbconfig) } - sqlite3_db_config [lindex $args 0] DEFENSIVE 1 set res } else { # This command is not opening a new database connection. Pass the diff --git a/test/trigger7.test b/test/trigger7.test index 5fa7638f8e..ecc86dbb13 100644 --- a/test/trigger7.test +++ b/test/trigger7.test @@ -106,6 +106,7 @@ do_test trigger7-3.1 { # in the series. # do_test trigger7-99.1 { + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema=on; UPDATE sqlite_master SET sql='nonsense'; diff --git a/test/triggerE.test b/test/triggerE.test index 8b010fa176..9db7035325 100644 --- a/test/triggerE.test +++ b/test/triggerE.test @@ -68,6 +68,7 @@ foreach {tn defn} { # Test that variable references within trigger definitions loaded from # the sqlite_master table are automatically converted to NULL. # +sqlite3_db_config db DEFENSIVE 0 do_execsql_test 2.1 { PRAGMA writable_schema = 1; INSERT INTO sqlite_master VALUES('trigger', 'tr1', 't1', 0, diff --git a/test/unionvtab.test b/test/unionvtab.test index ab0fb7474a..5725869b95 100644 --- a/test/unionvtab.test +++ b/test/unionvtab.test @@ -455,4 +455,3 @@ do_execsql_test 5.4 { } {six 6} finish_test - diff --git a/test/unionvtabfault.test b/test/unionvtabfault.test index 061645cd6a..f66c9ac978 100644 --- a/test/unionvtabfault.test +++ b/test/unionvtabfault.test @@ -81,4 +81,3 @@ do_faultsim_test 2.0 -faults * -prep { finish_test - diff --git a/test/vtab1.test b/test/vtab1.test index 3c60a8f9c9..193a53acf7 100644 --- a/test/vtab1.test +++ b/test/vtab1.test @@ -1253,6 +1253,7 @@ ifcapable altertable { # characters that can be mistaken for printf() formatting directives. # do_test vtab1-17.1 { + sqlite3_db_config db DEFENSIVE 0 execsql { PRAGMA writable_schema = 1; INSERT INTO sqlite_master VALUES( diff --git a/test/wherelimit2.test b/test/wherelimit2.test index 43a37958ee..83c04b14cf 100644 --- a/test/wherelimit2.test +++ b/test/wherelimit2.test @@ -297,4 +297,3 @@ do_test 5.5 { finish_test - diff --git a/test/window5.test b/test/window5.test index 40d218f2ab..890d6704b4 100644 --- a/test/window5.test +++ b/test/window5.test @@ -94,4 +94,3 @@ do_execsql_test 3.1 { finish_test - diff --git a/test/windowfault.test b/test/windowfault.test index e08d994166..9a3b219aa7 100644 --- a/test/windowfault.test +++ b/test/windowfault.test @@ -163,4 +163,3 @@ do_faultsim_test 8 -faults oom-t* -prep { } finish_test - diff --git a/test/zipfile2.test b/test/zipfile2.test index e9b93cab12..987e4f0cfd 100644 --- a/test/zipfile2.test +++ b/test/zipfile2.test @@ -241,4 +241,3 @@ do_execsql_test 6.3 { } {test2} finish_test - diff --git a/tool/genfkey.test b/tool/genfkey.test index 3c0073e953..16c67bb3cc 100644 --- a/tool/genfkey.test +++ b/tool/genfkey.test @@ -351,4 +351,3 @@ do_test genfkey-6.7 { SELECT * FROM child; } } {1 1} - From b7c2cf0aafc7fece87c8b48853ca65e1f4406d81 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 7 Nov 2018 14:41:08 +0000 Subject: [PATCH 07/10] More test-case adjustments for defensive mode. FossilOrigin-Name: 911e8a17a3810cd7042e91a32aba80dc3d6be88320c208e48f7bcee8b22a0ff2 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- test/corrupt.test | 1 + test/default.test | 1 + test/e_fts3.test | 1 + test/misc7.test | 1 + 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index f9e0923836..eb0ff22917 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sthe\spermutations\sfix\sfrom\strunk. -D 2018-11-07T13:41:27.488 +C More\stest-case\sadjustments\sfor\sdefensive\smode. +D 2018-11-07T14:41:08.900 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -726,7 +726,7 @@ F test/conflict.test 029faa2d81a0d1cafb5f88614beb663d972c01db F test/conflict2.test bb0b94cf7196c64a3cbd815c66d3ee98c2fecd9c F test/conflict3.test a83db76a6c3503b2fa057c7bfb08c318d8a422202d8bc5b86226e078e5b49ff9 F test/contrib01.test 2a1cbc0f2f48955d7d073f725765da6fbceda6b4 -F test/corrupt.test 141c39ea650c1365e85a49e402fa05cb9617fb97 +F test/corrupt.test d7cb0300e4a297147b6a05e92a1684bc8973635c3bcaa3d66e983c9cbdbf47a3 F test/corrupt2.test a7f95356d19a4e8bf9423622ad865cabf48ae49dad40eb7a17a0b39f1cdd6948 F test/corrupt3.test f95d7bf78109e0b84eb285a787ce91a3fd6a2dd7d0cb55882abff3bdc081a57e F test/corrupt4.test 8d1d86b850fcc43e417450454f2044e52d55778a @@ -775,7 +775,7 @@ F test/dbfuzz2.c 652f85bac1770e927da139db513234a3eba308f72ac2f8b32f0093d7d19def7 F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 F test/dbstatus.test cd83aa623b8aab477269bc94cf8aa90c1e195a144561dd04a1620770aaa8524e F test/dbstatus2.test f5fe0afed3fa45e57cfa70d1147606c20d2ba23feac78e9a172f2fe8ab5b78ef -F test/default.test 0cb49b1c315a0d81c81d775e407f66906a2a604d +F test/default.test 3e46c421eebefd2787c2f96673efabf792d360f3a1d5073918cbe450ce672a62 F test/delete.test 31832b0c45ecb51a54348c68db173be462985901e6ed7f403d6d7a8f70ab4ef0 F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa F test/delete3.test 555e84a00a99230b7d049d477a324a631126a6ab @@ -799,7 +799,7 @@ F test/e_droptrigger.test 3cd080807622c13e5bbb61fc9a57bd7754da2412 F test/e_dropview.test 21ce09c361227ddbc9819a5608ee2700c276bdd5 F test/e_expr.test ca8896601ade1e27c6559614c7f32c63d44636fdfa720436a160f09b8bf66c89 F test/e_fkey.test 9778696ef9fceacebed8d482d02b47287981faaedf6f73db563ea8a7afb546da -F test/e_fts3.test 8cf40550bb088a6aa187c818c00fabe26ef82900a4cd5c66b427ccafe28bedaa +F test/e_fts3.test 17ba7c373aba4d4f5696ba147ee23fd1a1ef70782af050e03e262ca187c5ee07 F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e F test/e_reindex.test 2b0e29344497d9a8a999453a003cb476b6b1d2eef2d6c120f83c2d3a429f3164 F test/e_resolve.test a61751c368b109db73df0f20fc75fb47e166b1d8 @@ -1118,7 +1118,7 @@ F test/misc3.test cf3dda47d5dda3e53fc5804a100d3c82be736c9d F test/misc4.test 10cd6addb2fa9093df4751a1b92b50440175dd5468a6ec84d0386e78f087db0e F test/misc5.test c4aeaa0fa28faa08f2485309c38db4719e6cd1364215d5687a5b96d340a3fa58 F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91 -F test/misc7.test 349855706310f0de6b91645d199f6874f518627fd057743fa4e3689b60d06efc +F test/misc7.test 10d639a5e0fdf1bd51ad42be705393a38780ad71b6957110035a4e6c1e5e7f40 F test/misc8.test 8fb0f31d7a8aed484d759773ab8ad12ec746a477f4a67394a4af0e677494c3ca F test/misuse.test 9e7f78402005e833af71dcab32d048003869eca5abcaccc985d4f8dc1d86bcc7 F test/mjournal.test 28a08d5cb5fb5b5702a46e19176e45e964e0800d1f894677169e79f34030e152 @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 3212733cb6d1a59516d67a86df7c7b1d2456a1b2e5d7080c26b0e87b2609c65d cbf85284beb60d068b446c52f000d694a810d4de9096ad2951523a4c88e7334c -R 7cc9720e15d66af90da1ecfd0b58d00d +P b753d849fe0524e14ae9367a47e29be76332fafb77bfe13e266aeef1ef6742ce +R 580e901d8f1a1e7956c16f5cbdc33912 U drh -Z 735c5b4bea5537def65958ee2d1f0352 +Z 9fcbd0668e3a5c715761bcabc2f89bae diff --git a/manifest.uuid b/manifest.uuid index 095f708667..0f8c20eeb6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b753d849fe0524e14ae9367a47e29be76332fafb77bfe13e266aeef1ef6742ce \ No newline at end of file +911e8a17a3810cd7042e91a32aba80dc3d6be88320c208e48f7bcee8b22a0ff2 \ No newline at end of file diff --git a/test/corrupt.test b/test/corrupt.test index 3e49a9ff18..62ead4d9a7 100644 --- a/test/corrupt.test +++ b/test/corrupt.test @@ -132,6 +132,7 @@ do_test corrupt-3.2 { set t1_r [execsql {SELECT rootpage FROM sqlite_master WHERE name = 't1i1'}] set t1i1_r [execsql {SELECT rootpage FROM sqlite_master WHERE name = 't1'}] set cookie [expr [execsql {PRAGMA schema_version}] + 1] + sqlite3_db_config db DEFENSIVE 0 execsql " PRAGMA writable_schema = 1; UPDATE sqlite_master SET rootpage = $t1_r WHERE name = 't1'; diff --git a/test/default.test b/test/default.test index 406eb53677..d691303485 100644 --- a/test/default.test +++ b/test/default.test @@ -106,6 +106,7 @@ do_execsql_test default-3.3 { db close forcedelete test.db sqlite3 db test.db +sqlite3_db_config db DEFENSIVE 0 do_execsql_test default-4.0 { CREATE TABLE t1(a TEXT, b TEXT DEFAULT(99)); PRAGMA writable_schema=ON; diff --git a/test/e_fts3.test b/test/e_fts3.test index 22c3fdb157..c06feab2d1 100644 --- a/test/e_fts3.test +++ b/test/e_fts3.test @@ -677,6 +677,7 @@ write_test 10.1.2 ta_content { INSERT INTO ta VALUES('During a summer vacation in 1790') } write_test 10.1.3 ta_content { INSERT INTO ta VALUES('Wordsworth went on a walking tour') } +sqlite3_db_config db DEFENSIVE 0 write_test 10.1.4 ta_content { DELETE FROM ta_content WHERE rowid = 2 } read_test 10.1.5 { SELECT * FROM ta WHERE ta MATCH 'summer' diff --git a/test/misc7.test b/test/misc7.test index 93e107beb0..5ae8178da5 100644 --- a/test/misc7.test +++ b/test/misc7.test @@ -434,6 +434,7 @@ if {$tcl_platform(platform)!="windows"} { set ::pending_byte_page [expr ($::sqlite_pending_byte / 1024) + 1] sqlite3_test_control_pending_byte $::sqlite_pending_byte do_test misc7-17.3 { + sqlite3_db_config db DEFENSIVE 0 db eval { pragma writable_schema = true; UPDATE sqlite_master From e1857cc01564034ccf4a72a453f529795c8598d9 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 7 Nov 2018 16:46:43 +0000 Subject: [PATCH 08/10] Performance improvement in subroutine that decides whether or not a table is read-only. FossilOrigin-Name: 6e4968b00507c4fdbe7e3c91f3f9cd61c6f1848092ddcf306f9fcb101a47fce7 --- manifest | 12 +++++------ manifest.uuid | 2 +- src/delete.c | 57 +++++++++++++++++++++++++++++---------------------- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/manifest b/manifest index 4ef71d9841..8fc9868f21 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sthe\sonefile\spermutation\sfix\sfrom\strunk. -D 2018-11-07T16:12:34.740 +C Performance\simprovement\sin\ssubroutine\sthat\sdecides\swhether\sor\snot\sa\stable\nis\sread-only. +D 2018-11-07T16:46:43.458 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -455,7 +455,7 @@ F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c cfa87c8a9e3b5267a72faa3a592a497cd3810146c056c53a3472caf763c8556b F src/dbstat.c 9ad3f2d9d19a915d414870b9405b19493eed41975f3ad0d13f70fdd0831853b4 -F src/delete.c 36825ff2d6d4026f4cde42dd0642bfc8aeacc7596330d0159683d66cca715a1e +F src/delete.c cec65c0e74be7492cafba1b77580732b0b1a41a4dbc4ac70909ac44b65b2a20b F src/expr.c 9aacc0b72348ba90010b672dcbbbe2fa56e1182043bc917a3a147b2bc57a5497 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 911e8a17a3810cd7042e91a32aba80dc3d6be88320c208e48f7bcee8b22a0ff2 13e21b7da8fe754e230b09ca0b9f1f69cd9aa20d4407ddd8b95ca3fb18c9abeb -R 56bf1824a48b5de2380d01acb7d29fb0 +P e543bff87d1efc31a5b863085c056ce06c365cc7d9d3fef0ced7521bde536783 +R 72f25975d392eaabe6c843161e0c6c08 U drh -Z b5475e4e894f27e1fb706ff1a175ea2a +Z 7e624fcbff194b9dd60db6c89a893b83 diff --git a/manifest.uuid b/manifest.uuid index 531c357390..8181b428b9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e543bff87d1efc31a5b863085c056ce06c365cc7d9d3fef0ced7521bde536783 \ No newline at end of file +6e4968b00507c4fdbe7e3c91f3f9cd61c6f1848092ddcf306f9fcb101a47fce7 \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index 7007de375b..157e1a8de1 100644 --- a/src/delete.c +++ b/src/delete.c @@ -44,40 +44,47 @@ Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){ return pTab; } +/* Return true if table pTab is read-only. +** +** A table is read-only if any of the following are true: +** +** 1) It is a virtual table and no implementation of the xUpdate method +** has been provided +** +** 2) It is a system table (i.e. sqlite_master), this call is not +** part of a nested parse and writable_schema pragma has not +** been specified +** +** 3) The table is a shadow table, the database connection is in +** defensive mode, and the current sqlite3_prepare() +** is for a top-level SQL statement. +*/ +static int tabIsReadOnly(Parse *pParse, Table *pTab){ + sqlite3 *db; + if( IsVirtual(pTab) ){ + return sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0; + } + if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0; + db = pParse->db; + if( (pTab->tabFlags & TF_Readonly)!=0 ){ + return sqlite3WritableSchema(db)==0 && pParse->nested==0; + } + assert( pTab->tabFlags & TF_Shadow ); + return (db->flags & SQLITE_Defensive)!=0 + && db->nVdbeExec==0 + && db->pVtabCtx==0; +} + /* ** Check to make sure the given table is writable. If it is not ** writable, generate an error message and return 1. If it is ** writable return 0; */ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ - sqlite3 *db = pParse->db; - /* A table is not writable under the following circumstances: - ** - ** 1) It is a virtual table and no implementation of the xUpdate method - ** has been provided, or - ** 2) It is a system table (i.e. sqlite_master), this call is not - ** part of a nested parse and writable_schema pragma has not - ** been specified. - ** 3) The table is a shadow table, the database connection is in - ** defensive mode, and the current sqlite3_prepare() - ** is for a top-level SQL statement. - ** - ** In either case leave an error message in pParse and return non-zero. - */ - if( ( IsVirtual(pTab) - && sqlite3GetVTable(db, pTab)->pMod->pModule->xUpdate==0 ) - || ( (pTab->tabFlags & TF_Readonly)!=0 - && sqlite3WritableSchema(db)==0 - && pParse->nested==0) - || ( (pTab->tabFlags & TF_Shadow)!=0 - && (db->flags & SQLITE_Defensive)!=0 - && db->nVdbeExec==0 - && db->pVtabCtx==0) - ){ + if( tabIsReadOnly(pParse, pTab) ){ sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); return 1; } - #ifndef SQLITE_OMIT_VIEW if( !viewOk && pTab->pSelect ){ sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName); From 635b4ce5f78f9f0171cb4058bb7103970292656b Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 8 Nov 2018 17:32:50 +0000 Subject: [PATCH 09/10] Improved documentation for SQLITE_DBCONFIG_DEFENSIVE. Add a NEVER() macro on an unreachable branch. FossilOrigin-Name: 9292d3351c40339de7ad6bc26c02e7592e6cdee2592e0c790fae63ccf21ea88c --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/build.c | 2 +- src/sqlite.h.in | 25 +++++++------------------ 4 files changed, 16 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index 8fc9868f21..bc25d7f428 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Performance\simprovement\sin\ssubroutine\sthat\sdecides\swhether\sor\snot\sa\stable\nis\sread-only. -D 2018-11-07T16:46:43.458 +C Improved\sdocumentation\sfor\sSQLITE_DBCONFIG_DEFENSIVE.\s\sAdd\sa\sNEVER()\smacro\non\san\sunreachable\sbranch. +D 2018-11-08T17:32:50.888 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -448,7 +448,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 3ef104ecae8b1b5f0458be1f5fa7c1ecf25fdc322a9d63bb8151f89eb32d381e F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 -F src/build.c 5bc91901b05ac7a33a324854bd2aa892311e71b82a887f99f390bead39e29175 +F src/build.c d70d8badf0aa07138da4a48116d5ba8b1f2e7ffe05d20d28e51fad949947defb F src/callback.c 789bd33d188146f66c0dd8306472a72d1c05f71924b24a91caf6bd45cf9aba73 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b @@ -506,7 +506,7 @@ F src/resolve.c bc8c79e56439b111e7d9415e44940951f7087e9466c3a9d664558ef0faf31073 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 61e867a906f140b73baf4ce7a201ad6dcba30820969f5618ee40e9a0d32c6f5f F src/shell.c.in 060ccc327959bdc85c895015eb382017fd0cd000ebd47b7e8dda42f8aab0b66f -F src/sqlite.h.in 9399b09de527be1d055411d7b826125f8f816bb9ebb052de847969bd8c46d701 +F src/sqlite.h.in 842ee6a2d3b2e7f2b56710f168cd189b92a2f54e68ef771e018e2ea7533c7e0e F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 F src/sqliteInt.h 7a6bbb9a8864af66d864eb4e4619e263b44a35b8604f6775e1e226133d14d5ef @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e543bff87d1efc31a5b863085c056ce06c365cc7d9d3fef0ced7521bde536783 -R 72f25975d392eaabe6c843161e0c6c08 +P 6e4968b00507c4fdbe7e3c91f3f9cd61c6f1848092ddcf306f9fcb101a47fce7 +R 154a97a36783190d92298418e014a00a U drh -Z 7e624fcbff194b9dd60db6c89a893b83 +Z ed660900217321d119edd1db60557ecd diff --git a/manifest.uuid b/manifest.uuid index 8181b428b9..2c2a763db0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6e4968b00507c4fdbe7e3c91f3f9cd61c6f1848092ddcf306f9fcb101a47fce7 \ No newline at end of file +9292d3351c40339de7ad6bc26c02e7592e6cdee2592e0c790fae63ccf21ea88c \ No newline at end of file diff --git a/src/build.c b/src/build.c index fca5a92228..99a2ddb73e 100644 --- a/src/build.c +++ b/src/build.c @@ -1914,7 +1914,7 @@ static int isShadowTableName(sqlite3 *db, char *zName){ if( pTab==0 ) return 0; if( !IsVirtual(pTab) ) return 0; pMod = (Module*)sqlite3HashFind(&db->aModule, pTab->azModuleArg[0]); - if( pMod==0 ) return 0; + if( NEVER(pMod==0) ) return 0; if( pMod->pModule->iVersion<3 ) return 0; if( pMod->pModule->xShadowName==0 ) return 0; return pMod->pModule->xShadowName(zTail+1); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 88476836c5..90d514bbd5 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -2160,27 +2160,16 @@ struct sqlite3_mem_methods { ** ensure that it does not happen by accident. ** **
SQLITE_DBCONFIG_DEFENSIVE
-**
The SQLITE_DBCONFIG_DEFENSIVE option actives or deactivates the +**
The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the ** "defensive" flag for a database connection. When the defensive -** flag is enabled, some obscure features of SQLite are disabled in order -** to reduce the attack surface. Applications that run untrusted SQL -** can activate this flag to reduce the risk of zero-day exploits. -**

-** Features disabled by the defensive flag include: +** flag is enabled, language features that allow ordinary SQL to +** deliberately corrupt the database file are disabled. The disabled +** features include but are not limited to the following: **

    -**
  • The [PRAGMA writable_schema=ON] statement. -**
  • Writes to the [sqlite_dbpage] virtual table. +**
  • The [PRAGMA writable_schema=ON] statement. +**
  • Writes to the [sqlite_dbpage] virtual table. +**
  • Direct writes to shadow tables. **
-** New restrictions may be added in future releases. -**

-** To be clear: It should never be possible for hostile SQL to cause -** arbitrary memory reads, memory leaks, buffer overflows, assertion -** faults, arbitrary code execution, crashes, or other mischief, regardless -** of the value of the defensive flag. Any occurrance of these problems -** is considered a serious bug and will be fixed promptly. It is not -** necessary to enable the defensive flag in order to make SQLite secure -** against attack. The defensive flag merely provides an additional layer -** of defense against unknown vulnerabilities. **

** */ From ab0659fdab491761f1f30c096158eaf4028eb472 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 10 Nov 2018 04:14:51 +0000 Subject: [PATCH 10/10] Remove a NEVER() that is reachable after all. Reverts checkin [9292d3351c40339]. FossilOrigin-Name: c5dc7fb873b15bd4e4f31b944c9feee78ab7ec2cb74f5fc55b615fd0e2784a88 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/build.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 0d4c466ec0..ce32d63954 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sfixes\sfrom\strunk. -D 2018-11-10T03:47:40.884 +C Remove\sa\sNEVER()\sthat\sis\sreachable\safter\sall.\sReverts\scheckin\s[9292d3351c40339]. +D 2018-11-10T04:14:51.670 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3 @@ -448,7 +448,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 3ef104ecae8b1b5f0458be1f5fa7c1ecf25fdc322a9d63bb8151f89eb32d381e F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 -F src/build.c d70d8badf0aa07138da4a48116d5ba8b1f2e7ffe05d20d28e51fad949947defb +F src/build.c 5bc91901b05ac7a33a324854bd2aa892311e71b82a887f99f390bead39e29175 F src/callback.c 789bd33d188146f66c0dd8306472a72d1c05f71924b24a91caf6bd45cf9aba73 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b @@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9292d3351c40339de7ad6bc26c02e7592e6cdee2592e0c790fae63ccf21ea88c a8d65214a567eb1afd703ee4d09d398247e060a610b46097a726364db2861001 -R c7b9e5ca4379ef7e497b820596e30e08 +P bf88efcec40036e0805940ff6371643dbc518442457d2bc18c711753607ae36c +R 19746ae363c493cc4aa5c073aad34c6e U drh -Z 71d5dbe0f37bcddde1bfdf928180ff85 +Z 3b35de947b23f688f81123c6213c6034 diff --git a/manifest.uuid b/manifest.uuid index 91450b1df9..92bef2fc1f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bf88efcec40036e0805940ff6371643dbc518442457d2bc18c711753607ae36c \ No newline at end of file +c5dc7fb873b15bd4e4f31b944c9feee78ab7ec2cb74f5fc55b615fd0e2784a88 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 99a2ddb73e..fca5a92228 100644 --- a/src/build.c +++ b/src/build.c @@ -1914,7 +1914,7 @@ static int isShadowTableName(sqlite3 *db, char *zName){ if( pTab==0 ) return 0; if( !IsVirtual(pTab) ) return 0; pMod = (Module*)sqlite3HashFind(&db->aModule, pTab->azModuleArg[0]); - if( NEVER(pMod==0) ) return 0; + if( pMod==0 ) return 0; if( pMod->pModule->iVersion<3 ) return 0; if( pMod->pModule->xShadowName==0 ) return 0; return pMod->pModule->xShadowName(zTail+1);