From 09612a5bb8c2ae47be5d7295506ab1e3cee9c1ce Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 14 Jun 2021 14:52:27 +0000 Subject: [PATCH 01/16] Fix a test script problem in corruptN.test. FossilOrigin-Name: 3ddfe9ae55e6d0d922fbc209768b2ac4a4792f0f63af9a8fb53d66a4b8f1d94b --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/corruptN.test | 16 +++++++++++----- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 3083a04af6..71b6d7df92 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C An\sindex\son\sthe\sexpression\s"likely(X)"\sshould\sstore\sthe\strue\svalue\sof\sX,\neven\sif\sX\sis\sa\sreal\snumber\swith\sno\sfractional\spart.\s\sThe\soptimization\sof\nstoring\ssome\sREAL\sindexed\svalues\sas\sINT\s(see\s[10d851353c2abead])\sshould\nbe\somitted\sfor\sindex\scolumns\sthat\sare\sexpressions.\n[forum:/forumpost/3b940c437a|Forum\spost\s3b940c437a]. -D 2021-06-14T14:00:09.237 +C Fix\sa\stest\sscript\sproblem\sin\scorruptN.test. +D 2021-06-14T14:52:27.395 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -802,7 +802,7 @@ F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4 F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af F test/corruptL.test df132ba9ffd6fa15038380b4154998b9904ab8f1ea78400d7da53c920cb3b13d F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067 -F test/corruptN.test f56e3417fe9a444efd765ae55acbe65595d7b8f747785fe0fd785dbdc424932a +F test/corruptN.test c2a96ff81386027f7d7e95858783aa36f82ba1532106969575e3c8f90903a5bb F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576 F test/count.test 5364003488249957750a5f15ee42ca1cd7b100b1131c2dc71fff266a1250bf55 F test/countofview.test e17d6e6688cf74f22783c9ec6e788c0790ee4fbbaee713affd00b1ac0bb39b86 @@ -1918,7 +1918,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 7068f1f69b4feef49260e80902e6bdae47c21a0daa16c96ed1a0984dd1f14cdc -R 974ce41a0966560f83eb180996ffcd22 -U drh -Z f5df566069add941ebed465cd1ba1b9e +P 791473bc6677c2ae76f558082a4b43ca1eaf9895b76624d5b55d58f2af898ff3 +R 1ec73471740d8ca9cec873343ba25025 +U dan +Z 3165e89d56a12ef29c6e244373f60df3 diff --git a/manifest.uuid b/manifest.uuid index 0c7014c181..6aa2979cac 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -791473bc6677c2ae76f558082a4b43ca1eaf9895b76624d5b55d58f2af898ff3 \ No newline at end of file +3ddfe9ae55e6d0d922fbc209768b2ac4a4792f0f63af9a8fb53d66a4b8f1d94b \ No newline at end of file diff --git a/test/corruptN.test b/test/corruptN.test index 4349468bb5..8600e438da 100644 --- a/test/corruptN.test +++ b/test/corruptN.test @@ -209,12 +209,18 @@ ifcapable json1&&vtab { WHERE type='index'; } - db close - sqlite3 db test.db + # Do not run this tests if there is any presql (SQL run from within + # the [sqlite3] command) configured. In this case the schema is parsed + # before the "PRAGMA writable_schema" command is executed and the + # script throws and exception. + if {[info exists ::G(perm:presql)]==0 || $::G(perm:presql)==""} { + db close + sqlite3 db test.db - do_execsql_test 5.1 { - PRAGMA writable_schema = 1; - SELECT * FROM t1 + do_execsql_test 5.1 { + PRAGMA writable_schema = 1; + SELECT * FROM t1 + } } }; # ifcapable json1&&vtab From ac67f56726c46553108896d0c2e417d67a678799 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 14 Jun 2021 20:08:48 +0000 Subject: [PATCH 02/16] Fix an ALTER TABLE problem with handling infinite loops of CTEs in the database schema. FossilOrigin-Name: c09d90eec2a49b948c60971294d146db5c82438855cd3fa48ddc3d2e6b44c26c --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/alter.c | 18 +++++++++++++++--- src/select.c | 1 + src/sqliteInt.h | 1 + test/altertab.test | 19 +++++++++++++++++++ 6 files changed, 46 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 71b6d7df92..1264da2da6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\stest\sscript\sproblem\sin\scorruptN.test. -D 2021-06-14T14:52:27.395 +C Fix\san\sALTER\sTABLE\sproblem\swith\shandling\sinfinite\sloops\sof\sCTEs\sin\sthe\sdatabase\sschema. +D 2021-06-14T20:08:48.007 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -478,7 +478,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c da02319df16f58f4a86c1b4a7c171ccb87cbee33f408545cff8fe12ac2fc4336 +F src/alter.c 961d8e65f15b089daa05d9e628890922ba9d41f00253abc8797c4f8a01841eb3 F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c F src/attach.c a514e81758ba7b3a3a0501faf70af6cfc509de8810235db726cfc9f25165e929 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853 @@ -544,12 +544,12 @@ F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 35630effd4d16d2373caa41bae40a3d71f853f3ad0cb4f572f2ed4b8c350c1e9 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 371cf15116b20b236f099c15daafd2ab6ef4bba43a263100aef60506f25cb3ff +F src/select.c 4fa607bab6bcc580f12dbaf9c800b2250a1e408f10321a1d3bcb1dd30c447e62 F src/shell.c.in 586493be0d3a2fc1e6803577d683697dfefc0fb305cc966bb389ce4045cbc19d F src/sqlite.h.in f450394634eac00bc680c0e91582b818359c6ad61149f49f90fb6ecbd526b51f F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e -F src/sqliteInt.h 30723f0f0528d080951270df667182d84f3a3bf7e0d4942007c4d38468042359 +F src/sqliteInt.h ab37a8dd95884fc25ef1eb7b6d53d6674905c67298affc2b5bf947f739096504 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -658,7 +658,7 @@ F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74 F test/altermalloc2.test ca3ebc01670d9313953a2b7628d8cc00dc5ea9988f229b3cbbbe1cca506dae45 F test/altermalloc3.test 059841a3de6b6780efd9f0b30bf1d9b4443c555f68d39975cbcac2583167b239 F test/alterqf.test 67568ad152db8c1187b15633b801242cf960f1beafc51261a3d1725d910baeb2 -F test/altertab.test 4120b9b2baa96ef2b0aaf4dd46b1858171503edf5e346b5ce939c73b4d314fa6 +F test/altertab.test 466b9757630d68455080690b6e99c5ff11b199df4b3530e17f3df10a63aa05d3 F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b F test/altertab3.test 2b82fa2236a3a91553d53ae5555d8e723c7eec174c41f1fa62ff497355398479 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f @@ -1918,7 +1918,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 791473bc6677c2ae76f558082a4b43ca1eaf9895b76624d5b55d58f2af898ff3 -R 1ec73471740d8ca9cec873343ba25025 +P 3ddfe9ae55e6d0d922fbc209768b2ac4a4792f0f63af9a8fb53d66a4b8f1d94b +R 6fd809181a9d25f2bff2632e26c04c9c U dan -Z 3165e89d56a12ef29c6e244373f60df3 +Z bdbdcc00e7e6c9d7dc2a086e308522a2 diff --git a/manifest.uuid b/manifest.uuid index 6aa2979cac..6694fbc33a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3ddfe9ae55e6d0d922fbc209768b2ac4a4792f0f63af9a8fb53d66a4b8f1d94b \ No newline at end of file +c09d90eec2a49b948c60971294d146db5c82438855cd3fa48ddc3d2e6b44c26c \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index 24b0960a26..2d585a3233 100644 --- a/src/alter.c +++ b/src/alter.c @@ -850,7 +850,11 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){ Parse *pParse = pWalker->pParse; int i; if( pParse->nErr ) return WRC_Abort; - if( p->selFlags & SF_View ) return WRC_Prune; + if( p->selFlags & (SF_View|SF_CopyCte) ){ + testcase( pSelect->selFlags & SF_View ); + testcase( pSelect->selFlags & SF_CopyCte ); + return WRC_Prune; + } if( ALWAYS(p->pEList) ){ ExprList *pList = p->pEList; for(i=0; inExpr; i++){ @@ -958,7 +962,11 @@ static RenameToken *renameTokenFind( ** descend into sub-select statements. */ static int renameColumnSelectCb(Walker *pWalker, Select *p){ - if( p->selFlags & SF_View ) return WRC_Prune; + if( p->selFlags & (SF_View|SF_CopyCte) ){ + testcase( pSelect->selFlags & SF_View ); + testcase( pSelect->selFlags & SF_CopyCte ); + return WRC_Prune; + } renameWalkWith(pWalker, p); return WRC_Continue; } @@ -1594,7 +1602,11 @@ static int renameTableSelectCb(Walker *pWalker, Select *pSelect){ int i; RenameCtx *p = pWalker->u.pRename; SrcList *pSrc = pSelect->pSrc; - if( pSelect->selFlags & SF_View ) return WRC_Prune; + if( pSelect->selFlags & (SF_View|SF_CopyCte) ){ + testcase( pSelect->selFlags & SF_View ); + testcase( pSelect->selFlags & SF_CopyCte ); + return WRC_Prune; + } if( NEVER(pSrc==0) ){ assert( pWalker->pParse->db->mallocFailed ); return WRC_Abort; diff --git a/src/select.c b/src/select.c index 660b8302e5..7d8fd5939d 100644 --- a/src/select.c +++ b/src/select.c @@ -5208,6 +5208,7 @@ static int resolveFromTermToCte( pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0); if( db->mallocFailed ) return 2; + pFrom->pSelect->selFlags |= SF_CopyCte; assert( pFrom->pSelect ); pFrom->fg.isCte = 1; pFrom->u2.pCteUse = pCteUse; diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 4e99be3843..91af412bbd 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3213,6 +3213,7 @@ struct Select { #define SF_UpdateFrom 0x0800000 /* Statement is an UPDATE...FROM */ #define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */ #define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */ +#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */ /* ** The results of a SELECT can be distributed in several ways, as defined diff --git a/test/altertab.test b/test/altertab.test index 8742c1769a..079a382d8b 100644 --- a/test/altertab.test +++ b/test/altertab.test @@ -949,4 +949,23 @@ do_execsql_test 30.2 { END} } +#------------------------------------------------------------------------- +reset_db +do_execsql_test 31.0 { + CREATE TABLE t1(q); + CREATE VIEW vvv AS WITH x AS (WITH y AS (SELECT * FROM x) SELECT 1) SELECT 1; +} + +do_execsql_test 31.1 { + SELECT * FROM vvv; +} {1} + +do_execsql_test 31.2 { + ALTER TABLE t1 RENAME TO t1x; +} + +do_execsql_test 31.3 { + ALTER TABLE t1x RENAME q TO x; +} + finish_test From 93fd5420d0f2a5431b6adf334687aabb8a09b37e Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 14 Jun 2021 20:41:20 +0000 Subject: [PATCH 03/16] In the authorizer, use SQLITE_DROP_INDEX, not SQLITE_DROP_TEMP_INDEX when dropping an index in an attached database. FossilOrigin-Name: e5a5acd6006133c5da4a7dd79726dbaa41c0d60ebeda890f848a6aafe5f9ef70 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/build.c | 2 +- test/auth.test | 16 +++++++++++++++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 1264da2da6..5787c9aa42 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sALTER\sTABLE\sproblem\swith\shandling\sinfinite\sloops\sof\sCTEs\sin\sthe\sdatabase\sschema. -D 2021-06-14T20:08:48.007 +C In\sthe\sauthorizer,\suse\sSQLITE_DROP_INDEX,\snot\sSQLITE_DROP_TEMP_INDEX\nwhen\sdropping\san\sindex\sin\san\sattached\sdatabase. +D 2021-06-14T20:41:20.405 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -488,7 +488,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 399e1ebcd6c4f9ad47f5457bfe3623441db287f0923433cf6539497791557be8 F src/btree.h 096cc53baa58be22b02c896d1cf933c38cfc6d65f9253c1367ece8cc88a24de5 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 -F src/build.c d766f04ddd88822c2c10cf3c0dfb34b068c45f103f442222038b9eeff02312ca +F src/build.c ea28944f65b04f771e7aa5d614d406faa1bde5fe4ce882e2ead73049f03ed568 F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 3052b6b05ed9ef547a3dd66b8e01bfa9d582e78752ad6ed327da84652641e038 @@ -690,7 +690,7 @@ F test/attach2.test 256bd240da1835fb8408dd59fb7ef71f8358c7a756c46662434d11d07ba3 F test/attach3.test c59d92791070c59272e00183b7353eeb94915976 F test/attach4.test 00e754484859998d124d144de6d114d920f2ed6ca2f961e6a7f4183c714f885e F test/attachmalloc.test 12c4f028e570acf9e0a4b0b7fe6f536e21f3d5ebddcece423603d0569beaf438 -F test/auth.test 2154625c05bc79f0e0ea72cb2358395a8041243caa0fd7ce7617d50da4331794 +F test/auth.test 567d917e0baddb6d0026a251cff977a3ab2c805a3cef906ba8653aafe7ad7240 F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1 F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49 F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec @@ -1918,7 +1918,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 3ddfe9ae55e6d0d922fbc209768b2ac4a4792f0f63af9a8fb53d66a4b8f1d94b -R 6fd809181a9d25f2bff2632e26c04c9c -U dan -Z bdbdcc00e7e6c9d7dc2a086e308522a2 +P c09d90eec2a49b948c60971294d146db5c82438855cd3fa48ddc3d2e6b44c26c +R ca541ab4643b90427a307c2c2b688692 +U drh +Z 2442e0ca0ad0efd743885780476b220e diff --git a/manifest.uuid b/manifest.uuid index 6694fbc33a..d5422ab7d3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c09d90eec2a49b948c60971294d146db5c82438855cd3fa48ddc3d2e6b44c26c \ No newline at end of file +e5a5acd6006133c5da4a7dd79726dbaa41c0d60ebeda890f848a6aafe5f9ef70 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 4680991ec0..5bf5680d46 100644 --- a/src/build.c +++ b/src/build.c @@ -4336,7 +4336,7 @@ void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){ if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ goto exit_drop_index; } - if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX; + if( !OMIT_TEMPDB && iDb==1 ) code = SQLITE_DROP_TEMP_INDEX; if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){ goto exit_drop_index; } diff --git a/test/auth.test b/test/auth.test index cc48fdb9aa..d8f23a15e2 100644 --- a/test/auth.test +++ b/test/auth.test @@ -1391,9 +1391,23 @@ do_test auth-1.205 { } catchsql {DROP INDEX i2} } {1 {not authorized}} -do_test auth-1.206 { +do_test auth-1.205a { set ::authargs } {i2 t2 main {}} +db eval { + ATTACH ':memory:' as di205; + CREATE TABLE di205.t1(x); + CREATE INDEX di205.t1x ON t1(x); +} +do_catchsql_test auth-1.205b { + DROP INDEX di205.t1x; +} {1 {not authorized}} +db eval { + DETACH di205; +} +do_test auth-1.206 { + set ::authargs +} {t1x t1 di205 {}} do_test auth-1.207 { execsql {SELECT name FROM sqlite_master} } {t2 i2} From 11e489d6cb6424a56ed11469b3a4d8b47f76b495 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 14 Jun 2021 20:49:33 +0000 Subject: [PATCH 04/16] Fix typos in testcase() macros from check-in [c09d90eec2a49b94]. FossilOrigin-Name: d4d9869c30710914b7ba51221b2c2223a9cf16b913bd6f3866ae747494a116af --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/alter.c | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 5787c9aa42..bab801c304 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\sauthorizer,\suse\sSQLITE_DROP_INDEX,\snot\sSQLITE_DROP_TEMP_INDEX\nwhen\sdropping\san\sindex\sin\san\sattached\sdatabase. -D 2021-06-14T20:41:20.405 +C Fix\stypos\sin\stestcase()\smacros\sfrom\scheck-in\s[c09d90eec2a49b94]. +D 2021-06-14T20:49:33.509 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -478,7 +478,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c 961d8e65f15b089daa05d9e628890922ba9d41f00253abc8797c4f8a01841eb3 +F src/alter.c 00212ce60260818eee9ce7d881251ae172f3996db577729a2593d2e3d70551ec F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c F src/attach.c a514e81758ba7b3a3a0501faf70af6cfc509de8810235db726cfc9f25165e929 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853 @@ -1918,7 +1918,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 c09d90eec2a49b948c60971294d146db5c82438855cd3fa48ddc3d2e6b44c26c -R ca541ab4643b90427a307c2c2b688692 +P e5a5acd6006133c5da4a7dd79726dbaa41c0d60ebeda890f848a6aafe5f9ef70 +R 67a7cde1721e58efa1cb0fdf174175c4 U drh -Z 2442e0ca0ad0efd743885780476b220e +Z 7ba7a7a4a5261a8076f57b1f0d8d08fc diff --git a/manifest.uuid b/manifest.uuid index d5422ab7d3..caf85ea73d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e5a5acd6006133c5da4a7dd79726dbaa41c0d60ebeda890f848a6aafe5f9ef70 \ No newline at end of file +d4d9869c30710914b7ba51221b2c2223a9cf16b913bd6f3866ae747494a116af \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index 2d585a3233..f1482cdf08 100644 --- a/src/alter.c +++ b/src/alter.c @@ -851,8 +851,8 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){ int i; if( pParse->nErr ) return WRC_Abort; if( p->selFlags & (SF_View|SF_CopyCte) ){ - testcase( pSelect->selFlags & SF_View ); - testcase( pSelect->selFlags & SF_CopyCte ); + testcase( p->selFlags & SF_View ); + testcase( p->selFlags & SF_CopyCte ); return WRC_Prune; } if( ALWAYS(p->pEList) ){ @@ -963,8 +963,8 @@ static RenameToken *renameTokenFind( */ static int renameColumnSelectCb(Walker *pWalker, Select *p){ if( p->selFlags & (SF_View|SF_CopyCte) ){ - testcase( pSelect->selFlags & SF_View ); - testcase( pSelect->selFlags & SF_CopyCte ); + testcase( p->selFlags & SF_View ); + testcase( p->selFlags & SF_CopyCte ); return WRC_Prune; } renameWalkWith(pWalker, p); From 972da427490e1b4541322ce1af9a5e531946c656 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 15 Jun 2021 14:34:21 +0000 Subject: [PATCH 05/16] Prevent an infinite loop in the trim() SQL function if the second argument is a carefully malformed UTF8 string. FossilOrigin-Name: 829343c26ed7b87fafc70de3369625209bad91e79bb7ca2946d5c8d61cc1c3c4 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/func.c | 21 +++++++++++---------- test/func.test | 7 +++++++ 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index bab801c304..a82bb9f97a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\stypos\sin\stestcase()\smacros\sfrom\scheck-in\s[c09d90eec2a49b94]. -D 2021-06-14T20:49:33.509 +C Prevent\san\sinfinite\sloop\sin\sthe\strim()\sSQL\sfunction\sif\sthe\ssecond\sargument\nis\sa\scarefully\smalformed\sUTF8\sstring. +D 2021-06-15T14:34:21.347 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -499,7 +499,7 @@ F src/delete.c 62451bba9fe641159e9c0b7d9d2bab1c48d0cff11e16de2d14000603d2af1fcf F src/expr.c 30a2abf526531ce6bd45fbc85bfec0fc3f6e5a0fb490cd2350855f2fc34dd789 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c e9063648396c58778f77583a678342fe4a9bc82436bf23c5f9f444f2df0fdaa4 -F src/func.c 88fd711754a7241cb9f8eb1391370fd0c0cea756b3358efa274c5d1efd59af93 +F src/func.c 9eb67f0aaf1cf439c21d6fc8afe270973d6e8345af3f1ebda98ad42186d30f5b F src/global.c 25ba4d58476f6be29bba9d9d14f7f146b78476d3a4d75ebb8c3b736328afe0f9 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 @@ -1034,7 +1034,7 @@ F test/fts4umlaut.test fcaca4471de7e78c9d1f7e8976e3e8704d7d8ad979d57a739d00f3f75 F test/fts4unicode.test 82a9c16b68ba2f358a856226bb2ee02f81583797bc4744061c54401bf1a0f4c9 F test/fts4upfrom.test f25835162c989dffd5e2ef91ec24c4848cc9973093e2d492d1c7b32afac1b49d F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d -F test/func.test f673822636fb8ed618dd2b80230d16e495d19c8f2e2e7d6c22e93e2b3de097ad +F test/func.test 77f6ea02c97d9ea64074461d347276a75df22d2cf51045a40f90857569e985f0 F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f F test/func3.test 2bb0f31ab7baaed690b962a88544d7be6b34fa389364bc36a44e441ed3e3f1e6 F test/func4.test 2285fb5792d593fef442358763f0fd9de806eda47dbc7a5934df57ffdc484c31 @@ -1918,7 +1918,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 e5a5acd6006133c5da4a7dd79726dbaa41c0d60ebeda890f848a6aafe5f9ef70 -R 67a7cde1721e58efa1cb0fdf174175c4 +P d4d9869c30710914b7ba51221b2c2223a9cf16b913bd6f3866ae747494a116af +R 1140229a8b312b5b0ad935a5a74919ba U drh -Z 7ba7a7a4a5261a8076f57b1f0d8d08fc +Z dd9b2df17b0c7422257831b53e0c4377 diff --git a/manifest.uuid b/manifest.uuid index caf85ea73d..1079eb364d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d4d9869c30710914b7ba51221b2c2223a9cf16b913bd6f3866ae747494a116af \ No newline at end of file +829343c26ed7b87fafc70de3369625209bad91e79bb7ca2946d5c8d61cc1c3c4 \ No newline at end of file diff --git a/src/func.c b/src/func.c index efb18a3fae..dc19ec7222 100644 --- a/src/func.c +++ b/src/func.c @@ -1316,10 +1316,10 @@ static void trimFunc( ){ const unsigned char *zIn; /* Input string */ const unsigned char *zCharSet; /* Set of characters to trim */ - int nIn; /* Number of bytes in input */ + unsigned int nIn; /* Number of bytes in input */ int flags; /* 1: trimleft 2: trimright 3: trim */ int i; /* Loop counter */ - unsigned char *aLen = 0; /* Length of each character in zCharSet */ + unsigned int *aLen = 0; /* Length of each character in zCharSet */ unsigned char **azChar = 0; /* Individual characters in zCharSet */ int nChar; /* Number of characters in zCharSet */ @@ -1328,13 +1328,13 @@ static void trimFunc( } zIn = sqlite3_value_text(argv[0]); if( zIn==0 ) return; - nIn = sqlite3_value_bytes(argv[0]); + nIn = (unsigned)sqlite3_value_bytes(argv[0]); assert( zIn==sqlite3_value_text(argv[0]) ); if( argc==1 ){ - static const unsigned char lenOne[] = { 1 }; + static const unsigned lenOne[] = { 1 }; static unsigned char * const azOne[] = { (u8*)" " }; nChar = 1; - aLen = (u8*)lenOne; + aLen = (unsigned*)lenOne; azChar = (unsigned char **)azOne; zCharSet = 0; }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ @@ -1345,15 +1345,16 @@ static void trimFunc( SQLITE_SKIP_UTF8(z); } if( nChar>0 ){ - azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); + azChar = contextMalloc(context, + ((i64)nChar)*(sizeof(char*)+sizeof(unsigned))); if( azChar==0 ){ return; } - aLen = (unsigned char*)&azChar[nChar]; + aLen = (unsigned*)&azChar[nChar]; for(z=zCharSet, nChar=0; *z; nChar++){ azChar[nChar] = (unsigned char *)z; SQLITE_SKIP_UTF8(z); - aLen[nChar] = (u8)(z - azChar[nChar]); + aLen[nChar] = (unsigned)(z - azChar[nChar]); } } } @@ -1361,7 +1362,7 @@ static void trimFunc( flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); if( flags & 1 ){ while( nIn>0 ){ - int len = 0; + unsigned int len = 0; for(i=0; i0 ){ - int len = 0; + unsigned int len = 0; for(i=0; i Date: Tue, 15 Jun 2021 15:15:40 +0000 Subject: [PATCH 06/16] Add NULL checks on all sqlite3_vfs_find(0) calls. This is not strictly necessary. There are no vulnerabilities here. However, adding these checks avoids unnecessary static analyzer complaints. [forum:/forumpost/ce1193be15|Forum post ce1193be15]. FossilOrigin-Name: 272a15b9f418fb0b31a9808f7c42c20cf52318035ff98935d8e8519634357e8d --- ext/misc/appendvfs.c | 1 + ext/misc/cksumvfs.c | 4 +--- ext/misc/memvfs.c | 1 + ext/misc/vfslog.c | 1 + ext/misc/vfsstat.c | 1 + ext/misc/zipfile.c | 1 + ext/rbu/rbu.c | 2 +- manifest | 32 ++++++++++++++++---------------- manifest.uuid | 2 +- src/memdb.c | 4 +++- src/random.c | 7 ++++++- src/shell.c.in | 1 + src/vdbesort.c | 5 +++-- 13 files changed, 37 insertions(+), 25 deletions(-) diff --git a/ext/misc/appendvfs.c b/ext/misc/appendvfs.c index ba6cc2c0b8..eb9ed01f62 100644 --- a/ext/misc/appendvfs.c +++ b/ext/misc/appendvfs.c @@ -657,6 +657,7 @@ int sqlite3_appendvfs_init( (void)pzErrMsg; (void)db; pOrig = sqlite3_vfs_find(0); + if( pOrig==0 ) return SQLITE_ERROR; apnd_vfs.iVersion = pOrig->iVersion; apnd_vfs.pAppData = pOrig; apnd_vfs.szOsFile = pOrig->szOsFile + sizeof(ApndFile); diff --git a/ext/misc/cksumvfs.c b/ext/misc/cksumvfs.c index 6994dc7760..8c340889fe 100644 --- a/ext/misc/cksumvfs.c +++ b/ext/misc/cksumvfs.c @@ -823,6 +823,7 @@ static int cksmRegisterVfs(void){ sqlite3_vfs *pOrig; if( sqlite3_vfs_find("cksmvfs")!=0 ) return SQLITE_OK; pOrig = sqlite3_vfs_find(0); + if( pOrig==0 ) return SQLITE_ERROR; cksm_vfs.iVersion = pOrig->iVersion; cksm_vfs.pAppData = pOrig; cksm_vfs.szOsFile = pOrig->szOsFile + sizeof(CksmFile); @@ -870,9 +871,6 @@ int sqlite3_cksumvfs_init( SQLITE_EXTENSION_INIT2(pApi); (void)pzErrMsg; /* not used */ rc = cksmRegisterFunc(db, 0, 0); - if( rc==SQLITE_OK ){ - - } if( rc==SQLITE_OK ){ rc = cksmRegisterVfs(); } diff --git a/ext/misc/memvfs.c b/ext/misc/memvfs.c index 27a61c35e4..83fc9468e6 100644 --- a/ext/misc/memvfs.c +++ b/ext/misc/memvfs.c @@ -559,6 +559,7 @@ int sqlite3_memvfs_init( int rc = SQLITE_OK; SQLITE_EXTENSION_INIT2(pApi); mem_vfs.pAppData = sqlite3_vfs_find(0); + if( mem_vfs.pAppData==0 ) return SQLITE_ERROR; mem_vfs.szOsFile = sizeof(MemFile); rc = sqlite3_vfs_register(&mem_vfs, 1); #ifdef MEMVFS_TEST diff --git a/ext/misc/vfslog.c b/ext/misc/vfslog.c index 24a46a921f..cb5bc5513a 100644 --- a/ext/misc/vfslog.c +++ b/ext/misc/vfslog.c @@ -754,6 +754,7 @@ static int vlogCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p){ */ int sqlite3_register_vfslog(const char *zArg){ vlog_vfs.pVfs = sqlite3_vfs_find(0); + if( vlog_vfs.pVfs==0 ) return SQLITE_ERROR; vlog_vfs.base.szOsFile = sizeof(VLogFile) + vlog_vfs.pVfs->szOsFile; return sqlite3_vfs_register(&vlog_vfs.base, 1); } diff --git a/ext/misc/vfsstat.c b/ext/misc/vfsstat.c index 186ed788fc..83a7a3df75 100644 --- a/ext/misc/vfsstat.c +++ b/ext/misc/vfsstat.c @@ -806,6 +806,7 @@ int sqlite3_vfsstat_init( int rc = SQLITE_OK; SQLITE_EXTENSION_INIT2(pApi); vstat_vfs.pVfs = sqlite3_vfs_find(0); + if( vstat_vfs.pVfs==0 ) return SQLITE_ERROR; vstat_vfs.base.szOsFile = sizeof(VStatFile) + vstat_vfs.pVfs->szOsFile; rc = sqlite3_vfs_register(&vstat_vfs.base, 1); if( rc==SQLITE_OK ){ diff --git a/ext/misc/zipfile.c b/ext/misc/zipfile.c index 86f7ba0f94..b727f9f2be 100644 --- a/ext/misc/zipfile.c +++ b/ext/misc/zipfile.c @@ -1486,6 +1486,7 @@ static int zipfileBegin(sqlite3_vtab *pVtab){ static u32 zipfileTime(void){ sqlite3_vfs *pVfs = sqlite3_vfs_find(0); u32 ret; + if( pVfs==0 ) return 0; if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){ i64 ms; pVfs->xCurrentTimeInt64(pVfs, &ms); diff --git a/ext/rbu/rbu.c b/ext/rbu/rbu.c index 91773409cf..7a24db214e 100644 --- a/ext/rbu/rbu.c +++ b/ext/rbu/rbu.c @@ -56,7 +56,7 @@ void usage(const char *zArgv0){ void report_default_vfs(){ sqlite3_vfs *pVfs = sqlite3_vfs_find(0); - fprintf(stdout, "default vfs is \"%s\"\n", pVfs->zName); + fprintf(stdout, "default vfs is \"%s\"\n", pVfs ? pVfs->zName : "NULL"); } void report_rbu_vfs(sqlite3rbu *pRbu){ diff --git a/manifest b/manifest index a82bb9f97a..6c3479e0b1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Prevent\san\sinfinite\sloop\sin\sthe\strim()\sSQL\sfunction\sif\sthe\ssecond\sargument\nis\sa\scarefully\smalformed\sUTF8\sstring. -D 2021-06-15T14:34:21.347 +C Add\sNULL\schecks\son\sall\ssqlite3_vfs_find(0)\scalls.\s\sThis\sis\snot\sstrictly\nnecessary.\s\sThere\sare\sno\svulnerabilities\shere.\s\sHowever,\sadding\sthese\nchecks\savoids\sunnecessary\sstatic\sanalyzer\scomplaints.\n[forum:/forumpost/ce1193be15|Forum\spost\sce1193be15]. +D 2021-06-15T15:15:40.609 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -286,12 +286,12 @@ F ext/lsm1/tool/mklsm1c.tcl f31561bbee5349f0a554d1ad7236ac1991fc09176626f529f607 F ext/misc/README.md d6dd0fe1d8af77040216798a6a2b0c46c73054d2f0ea544fbbcdccf6f238c240 F ext/misc/amatch.c e3ad5532799cee9a97647f483f67f43b38796b84b5a8c60594fe782a4338f358 F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb -F ext/misc/appendvfs.c 500fef0736caafc629ca1dbae348a121367eaa4ed8c385c291cb9ad65ea790fb +F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824 F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0edb2a F ext/misc/btreeinfo.c d28ce349b40054eaa9473e835837bad7a71deec33ba13e39f963d50933bfa0f9 F ext/misc/carray.c b75a0f207391038bf1540d3372f482a95c3613511c7c474db51ede1196321c7c F ext/misc/carray.h de74ac70b2338f416723f7d538026e8ec0b7f1d388319f8f140c9a4d7677f02e -F ext/misc/cksumvfs.c 2c6b07714f3be6c1200671c53aa781a86d2c472c0fcb2fff520375362eb94303 +F ext/misc/cksumvfs.c b42ef52eaaa510d54ec320c87bea149e934a3b06cd232be2093562bf669bd572 F ext/misc/closure.c dbfd8543b2a017ae6b1a5843986b22ddf99ff126ec9634a2f4047cd14c85c243 F ext/misc/completion.c 6dafd7f4348eecc7be9e920d4b419d1fb2af75d938cd9c59a20cfe8beb2f22b9 F ext/misc/compress.c 3354c77a7c8e86e07d849916000cdac451ed96500bfb5bd83b20eb61eee012c9 @@ -308,7 +308,7 @@ F ext/misc/ieee754.c cd6ab89f85fda8a020559b3f4d03001a8a62dd856beda5af3f558621d12 F ext/misc/json1.c 76c5d9e0960fd15b4be79dacb76d872b4d0d983ce13e72ebfe9481d82cb9345d F ext/misc/memstat.c 3017a0832c645c0f8c773435620d663855f04690172316bd127270d1a7523d4d F ext/misc/memtrace.c 7c0d115d2ef716ad0ba632c91e05bd119cb16c1aedf3bec9f06196ead2d5537b -F ext/misc/memvfs.c ab36f49e02ebcdf85a1e08dc4d8599ea8f343e073ac9e0bca18a98b7e1ec9567 +F ext/misc/memvfs.c 7dffa8cc89c7f2d73da4bd4ccea1bcbd2bd283e3bb4cea398df7c372a197291b F ext/misc/mmapwarm.c 347caa99915fb254e8949ec131667b7fae99e2a9ce91bd468efb6dc372d9b7a9 F ext/misc/nextchar.c 7877914c2a80c2f181dd04c3dbef550dfb54c93495dc03da2403b5dd58f34edd F ext/misc/noop.c 81efe4cad9ec740e64388b14281cb983e6e2c223fed43eb77ab3e34946e0c1ab @@ -332,14 +332,14 @@ F ext/misc/uint.c 053fed3bce2e89583afcd4bf804d75d659879bbcedac74d0fa9ed548839a03 F ext/misc/unionvtab.c 36237f0607ca954ac13a4a0e2d2ac40c33bc6e032a5f55f431713061ef1625f9 F ext/misc/urifuncs.c f71360d14fa9e7626b563f1f781c6148109462741c5235ac63ae0f8917b9c751 F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505cf -F ext/misc/vfslog.c 3b25c2f56ba60788db247287be6ab024b53c4afffd412b4876db563389be0d35 -F ext/misc/vfsstat.c 389ea13983d3af926504c314f06a83cc858d5adc24b40af74aaed1fece00c118 +F ext/misc/vfslog.c 3932ab932eeb2601dbc4447cb14d445aaa9fbe43b863ef5f014401c3420afd20 +F ext/misc/vfsstat.c 474d08efc697b8eba300082cb1eb74a5f0f3df31ed257db1cb07e72ab0e53dfb F ext/misc/vtablog.c 5538acd0c8ddaae372331bee11608d76973436b77d6a91e8635cfc9432fba5ae F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd F ext/misc/wholenumber.c a838d1bea913c514ff316c69695efbb49ea3b8cb37d22afc57f73b6b010b4546 -F ext/misc/zipfile.c acbad31bd9c9ec3540fa72b2e3fcd6f757eb33117d51528c0e13d0da5c836908 +F ext/misc/zipfile.c b7261ef6dbc2d18924ff80c40fb5d56c9ccfee3f822a7d3d43b7c87af3d27218 F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64 -F ext/rbu/rbu.c b880ca5cb857d6d6f52e72eb7397813058ef48c78c5402cd04ff2b6b5437f622 +F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8 F ext/rbu/rbu1.test c62904bd9526dcdc3496a21199aaf14ae191bbadbf67f076bf16be6b3f2115c2 F ext/rbu/rbu10.test 0a201c32202143f23c81c0144503da339786fc20acb7a2fda11601b65659f314 F ext/rbu/rbu11.test 5c834cf491086b45e071eabf71f708febc143e86a384a92de69e0b1a4cace144 @@ -515,7 +515,7 @@ F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de F src/mem2.c b93b8762ab999a29ae7751532dadf0a1ac78040308a5fb1d17fcc365171d67eb F src/mem3.c 30301196cace2a085cbedee1326a49f4b26deff0af68774ca82c1f7c06fda4f6 F src/mem5.c 9bf955937b07f8c32541c8a9991f33ce3173d944 -F src/memdb.c f6ce717b26cd51a24cda62fce611b4b72b3db367113374aa498e489a69470715 +F src/memdb.c 2f2e8efc6e531c59cf8255f0bf4ad81f2e88e0a394581244154c8cf5141757ce F src/memjournal.c a85f0dc5c02a42453d0bc3819ecfb5666cb6433e5deefcd93ccbe05c9f088b83 F src/msvc.h 3a15918220367a8876be3fa4f2abe423a861491e84b864fb2b7426bf022a28f8 F src/mutex.c 5e3409715552348732e97b9194abe92fdfcd934cfb681df4ba0ab87ac6c18d25 @@ -541,11 +541,11 @@ F src/pragma.c eb42cb9bec189cf18cef5d8fcae56e13bb73ef2b019b198fb48740ced81bce95 F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf F src/prepare.c 0d53d20532aada295c1690792a125adbd6435f5ce703ff0adf1b9b3605238b67 F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b -F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 +F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 35630effd4d16d2373caa41bae40a3d71f853f3ad0cb4f572f2ed4b8c350c1e9 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 4fa607bab6bcc580f12dbaf9c800b2250a1e408f10321a1d3bcb1dd30c447e62 -F src/shell.c.in 586493be0d3a2fc1e6803577d683697dfefc0fb305cc966bb389ce4045cbc19d +F src/shell.c.in f3e91c697f33daae14923355dcadfc26bb0c1eabdb343e5508706893e017a0a6 F src/sqlite.h.in f450394634eac00bc680c0e91582b818359c6ad61149f49f90fb6ecbd526b51f F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e @@ -623,7 +623,7 @@ F src/vdbeapi.c aa5aaf2c37676b83af5724c6cd8207a3064ed46a217fd180957f75ac84f7a2a5 F src/vdbeaux.c 065a10392378109f08435bd50d03dff315e384cde2831d6b8dbaec05f33b10af F src/vdbeblob.c c6b8db50b227f66fb404215732068df76485b5b433e5f9d4d9ac27410b218193 F src/vdbemem.c 53881aa0a7845922a075b3f375695588618098871a7a4120af4c297b80fa3e64 -F src/vdbesort.c f5b5e473a7cee44e47a94817b042fd7172cf3aa2c0a7928a8339d612bcfdec5a +F src/vdbesort.c cd5130f683706c1a43e165a74187745fb3351cb56052cf9dc91de820634bbde2 F src/vdbetrace.c 666c6fd9f1b62be6999e072a45b913e3c2c3518bc60dfd4d54fe304130acb724 F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c F src/vtab.c b928405ccb66040fc6c3a11eaa93ddb02cbf20f9ab6860b301b222b9b50dc089 @@ -1918,7 +1918,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 d4d9869c30710914b7ba51221b2c2223a9cf16b913bd6f3866ae747494a116af -R 1140229a8b312b5b0ad935a5a74919ba +P 829343c26ed7b87fafc70de3369625209bad91e79bb7ca2946d5c8d61cc1c3c4 +R 9aa6f2e0346815fa6d5daf16e2359ae5 U drh -Z dd9b2df17b0c7422257831b53e0c4377 +Z 993cbec21430496a6c026bc47f824357 diff --git a/manifest.uuid b/manifest.uuid index 1079eb364d..2fbcda8cbf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -829343c26ed7b87fafc70de3369625209bad91e79bb7ca2946d5c8d61cc1c3c4 \ No newline at end of file +272a15b9f418fb0b31a9808f7c42c20cf52318035ff98935d8e8519634357e8d \ No newline at end of file diff --git a/src/memdb.c b/src/memdb.c index 965ec36d41..4e5751f931 100644 --- a/src/memdb.c +++ b/src/memdb.c @@ -861,7 +861,9 @@ end_deserialize: */ int sqlite3MemdbInit(void){ sqlite3_vfs *pLower = sqlite3_vfs_find(0); - unsigned int sz = pLower->szOsFile; + unsigned int sz; + if( NEVER(pLower==0) ) return SQLITE_ERROR; + sz = pLower->szOsFile; memdb_vfs.pAppData = pLower; /* The following conditional can only be true when compiled for ** Windows x86 and SQLITE_MAX_MMAP_SIZE=0. We always leave diff --git a/src/random.c b/src/random.c index d4ae77c435..87f9e2cecb 100644 --- a/src/random.c +++ b/src/random.c @@ -76,11 +76,16 @@ void sqlite3_randomness(int N, void *pBuf){ ** number generator) not as an encryption device. */ if( !wsdPrng.isInit ){ + sqlite3_vfs *pVfs = sqlite3_vfs_find(0); int i; char k[256]; wsdPrng.j = 0; wsdPrng.i = 0; - sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k); + if( NEVER(pVfs==0) ){ + memset(k, 0, sizeof(k)); + }else{ + sqlite3OsRandomness(pVfs, 256, k); + } for(i=0; i<256; i++){ wsdPrng.s[i] = (u8)i; } diff --git a/src/shell.c.in b/src/shell.c.in index 5aa28d0b6a..0f8de61a14 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -226,6 +226,7 @@ static sqlite3_int64 timeOfDay(void){ static sqlite3_vfs *clockVfs = 0; sqlite3_int64 t; if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0); + if( clockVfs==0 ) return 0; /* Never actually happens */ if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){ clockVfs->xCurrentTimeInt64(clockVfs, &t); }else{ diff --git a/src/vdbesort.c b/src/vdbesort.c index f61b8b7320..397935aa8c 100644 --- a/src/vdbesort.c +++ b/src/vdbesort.c @@ -1073,8 +1073,9 @@ static void vdbeSorterWorkDebug(SortSubtask *pTask, const char *zEvent){ fprintf(stderr, "%lld:%d %s\n", t, iTask, zEvent); } static void vdbeSorterRewindDebug(const char *zEvent){ - i64 t; - sqlite3OsCurrentTimeInt64(sqlite3_vfs_find(0), &t); + i64 t = 0; + sqlite3_vfs *pVfs = sqlite3_vfs_find(0); + if( ALWAYS(pVfs) ) sqlite3OsCurrentTimeInt64(pVfs, &t); fprintf(stderr, "%lld:X %s\n", t, zEvent); } static void vdbeSorterPopulateDebug( From 17adf4e5a1e5326fe92d7e224b84a8f24f33b2b5 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 15 Jun 2021 15:36:05 +0000 Subject: [PATCH 07/16] Update the "nmakehlp.c" utility program sources associated with the TCL Extension Architecture, obtained from [https://core.tcl-lang.org/sampleextension/file]. Perhaps this new version will sit better with salmonx's static analyzer [forum:/forumpost/7f0beca9797ee23a|(ref1)], [forum:/forumpost/7d5c8b19231ad57f|(ref2)]. FossilOrigin-Name: 603b851d7d923d71543760b09a55d72dbbc185ac9c353c954c331c0454992c80 --- autoconf/tea/win/nmakehlp.c | 183 ++++++++++++++++++++++++++++++------ manifest | 12 +-- manifest.uuid | 2 +- 3 files changed, 159 insertions(+), 38 deletions(-) diff --git a/autoconf/tea/win/nmakehlp.c b/autoconf/tea/win/nmakehlp.c index e00f1b4996..7536edee33 100644 --- a/autoconf/tea/win/nmakehlp.c +++ b/autoconf/tea/win/nmakehlp.c @@ -14,13 +14,8 @@ #define _CRT_SECURE_NO_DEPRECATE #include -#define NO_SHLWAPI_GDI -#define NO_SHLWAPI_STREAM -#define NO_SHLWAPI_REG -#include #pragma comment (lib, "user32.lib") #pragma comment (lib, "kernel32.lib") -#pragma comment (lib, "shlwapi.lib") #include #include @@ -39,15 +34,15 @@ #endif - /* protos */ static int CheckForCompilerFeature(const char *option); -static int CheckForLinkerFeature(const char *option); +static int CheckForLinkerFeature(const char **options, int count); static int IsIn(const char *string, const char *substring); static int SubstituteFile(const char *substs, const char *filename); static int QualifyPath(const char *path); -static const char *GetVersionFromFile(const char *filename, const char *match); +static int LocateDependency(const char *keyfile); +static const char *GetVersionFromFile(const char *filename, const char *match, int numdots); static DWORD WINAPI ReadFromPipe(LPVOID args); /* globals */ @@ -74,6 +69,7 @@ main( char msg[300]; DWORD dwWritten; int chars; + const char *s; /* * Make sure children (cl.exe and link.exe) are kept quiet. @@ -102,16 +98,16 @@ main( } return CheckForCompilerFeature(argv[2]); case 'l': - if (argc != 3) { + if (argc < 3) { chars = snprintf(msg, sizeof(msg) - 1, - "usage: %s -l \n" + "usage: %s -l ? ...?\n" "Tests for whether link.exe supports an option\n" "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL); return 2; } - return CheckForLinkerFeature(argv[2]); + return CheckForLinkerFeature(&argv[2], argc-2); case 'f': if (argc == 2) { chars = snprintf(msg, sizeof(msg) - 1, @@ -153,8 +149,13 @@ main( &dwWritten, NULL); return 0; } - printf("%s\n", GetVersionFromFile(argv[2], argv[3])); - return 0; + s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'); + if (s && *s) { + printf("%s\n", s); + return 0; + } else + return 1; /* Version not found. Return non-0 exit code */ + case 'Q': if (argc != 3) { chars = snprintf(msg, sizeof(msg) - 1, @@ -166,6 +167,18 @@ main( return 2; } return QualifyPath(argv[2]); + + case 'L': + if (argc != 3) { + chars = snprintf(msg, sizeof(msg) - 1, + "usage: %s -L keypath\n" + "Emit the fully qualified path of directory containing keypath\n" + "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]); + WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, + &dwWritten, NULL); + return 2; + } + return LocateDependency(argv[2]); } } chars = snprintf(msg, sizeof(msg) - 1, @@ -313,7 +326,8 @@ CheckForCompilerFeature( static int CheckForLinkerFeature( - const char *option) + const char **options, + int count) { STARTUPINFO si; PROCESS_INFORMATION pi; @@ -322,7 +336,8 @@ CheckForLinkerFeature( char msg[300]; BOOL ok; HANDLE hProcess, h, pipeThreads[2]; - char cmdline[100]; + int i; + char cmdline[255]; hProcess = GetCurrentProcess(); @@ -368,7 +383,11 @@ CheckForLinkerFeature( * Append our option for testing. */ - lstrcat(cmdline, option); + for (i = 0; i < count; i++) { + lstrcat(cmdline, " \""); + lstrcat(cmdline, options[i]); + lstrcat(cmdline, "\""); + } ok = CreateProcess( NULL, /* Module name. */ @@ -433,7 +452,9 @@ CheckForLinkerFeature( return !(strstr(Out.buffer, "LNK1117") != NULL || strstr(Err.buffer, "LNK1117") != NULL || strstr(Out.buffer, "LNK4044") != NULL || - strstr(Err.buffer, "LNK4044") != NULL); + strstr(Err.buffer, "LNK4044") != NULL || + strstr(Out.buffer, "LNK4224") != NULL || + strstr(Err.buffer, "LNK4224") != NULL); } static DWORD WINAPI @@ -479,7 +500,8 @@ IsIn( static const char * GetVersionFromFile( const char *filename, - const char *match) + const char *match, + int numdots) { size_t cbBuffer = 100; static char szBuffer[100]; @@ -497,9 +519,10 @@ GetVersionFromFile( p = strstr(szBuffer, match); if (p != NULL) { /* - * Skip to first digit. + * Skip to first digit after the match. */ + p += strlen(match); while (*p && !isdigit(*p)) { ++p; } @@ -509,7 +532,8 @@ GetVersionFromFile( */ q = p; - while (*q && (isalnum(*q) || *q == '.')) { + while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q) + && (!strchr("ab", q[-1])) || --numdots))) { ++q; } @@ -619,7 +643,7 @@ SubstituteFile( } /* debug: dump the list */ -#ifdef _DEBUG +#ifndef NDEBUG { int n = 0; list_item_t *p = NULL; @@ -628,11 +652,11 @@ SubstituteFile( } } #endif - + /* * Run the substitutions over each line of the input */ - + while (fgets(szBuffer, cbBuffer, fp) != NULL) { list_item_t *p = NULL; for (p = substPtr; p != NULL; p = p->nextPtr) { @@ -652,13 +676,24 @@ SubstituteFile( } printf(szBuffer); } - + list_free(&substPtr); } fclose(fp); return 0; } +BOOL FileExists(LPCTSTR szPath) +{ +#ifndef INVALID_FILE_ATTRIBUTES + #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) +#endif + DWORD pathAttr = GetFileAttributes(szPath); + return (pathAttr != INVALID_FILE_ATTRIBUTES && + !(pathAttr & FILE_ATTRIBUTE_DIRECTORY)); +} + + /* * QualifyPath -- * @@ -672,17 +707,103 @@ QualifyPath( const char *szPath) { char szCwd[MAX_PATH + 1]; - char szTmp[MAX_PATH + 1]; - char *p; - GetCurrentDirectory(MAX_PATH, szCwd); - while ((p = strchr(szPath, '/')) && *p) - *p = '\\'; - PathCombine(szTmp, szCwd, szPath); - PathCanonicalize(szCwd, szTmp); + + GetFullPathName(szPath, sizeof(szCwd)-1, szCwd, NULL); printf("%s\n", szCwd); return 0; } +/* + * Implements LocateDependency for a single directory. See that command + * for an explanation. + * Returns 0 if found after printing the directory. + * Returns 1 if not found but no errors. + * Returns 2 on any kind of error + * Basically, these are used as exit codes for the process. + */ +static int LocateDependencyHelper(const char *dir, const char *keypath) +{ + HANDLE hSearch; + char path[MAX_PATH+1]; + int dirlen, keylen, ret; + WIN32_FIND_DATA finfo; + + if (dir == NULL || keypath == NULL) + return 2; /* Have no real error reporting mechanism into nmake */ + dirlen = strlen(dir); + if ((dirlen + 3) > sizeof(path)) + return 2; + strncpy(path, dir, dirlen); + strncpy(path+dirlen, "\\*", 3); /* Including terminating \0 */ + keylen = strlen(keypath); + +#if 0 /* This function is not available in Visual C++ 6 */ + /* + * Use numerics 0 -> FindExInfoStandard, + * 1 -> FindExSearchLimitToDirectories, + * as these are not defined in Visual C++ 6 + */ + hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0); +#else + hSearch = FindFirstFile(path, &finfo); +#endif + if (hSearch == INVALID_HANDLE_VALUE) + return 1; /* Not found */ + + /* Loop through all subdirs checking if the keypath is under there */ + ret = 1; /* Assume not found */ + do { + int sublen; + /* + * We need to check it is a directory despite the + * FindExSearchLimitToDirectories in the above call. See SDK docs + */ + if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + continue; + sublen = strlen(finfo.cFileName); + if ((dirlen+1+sublen+1+keylen+1) > sizeof(path)) + continue; /* Path does not fit, assume not matched */ + strncpy(path+dirlen+1, finfo.cFileName, sublen); + path[dirlen+1+sublen] = '\\'; + strncpy(path+dirlen+1+sublen+1, keypath, keylen+1); + if (FileExists(path)) { + /* Found a match, print to stdout */ + path[dirlen+1+sublen] = '\0'; + QualifyPath(path); + ret = 0; + break; + } + } while (FindNextFile(hSearch, &finfo)); + FindClose(hSearch); + return ret; +} + +/* + * LocateDependency -- + * + * Locates a dependency for a package. + * keypath - a relative path within the package directory + * that is used to confirm it is the correct directory. + * The search path for the package directory is currently only + * the parent and grandparent of the current working directory. + * If found, the command prints + * name_DIRPATH= + * and returns 0. If not found, does not print anything and returns 1. + */ +static int LocateDependency(const char *keypath) +{ + int i, ret; + static const char *paths[] = {"..", "..\\..", "..\\..\\.."}; + + for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) { + ret = LocateDependencyHelper(paths[i], keypath); + if (ret == 0) + return ret; + } + return ret; +} + + /* * Local variables: * mode: c diff --git a/manifest b/manifest index 6c3479e0b1..5c040d1cdb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sNULL\schecks\son\sall\ssqlite3_vfs_find(0)\scalls.\s\sThis\sis\snot\sstrictly\nnecessary.\s\sThere\sare\sno\svulnerabilities\shere.\s\sHowever,\sadding\sthese\nchecks\savoids\sunnecessary\sstatic\sanalyzer\scomplaints.\n[forum:/forumpost/ce1193be15|Forum\spost\sce1193be15]. -D 2021-06-15T15:15:40.609 +C Update\sthe\s"nmakehlp.c"\sutility\sprogram\ssources\sassociated\swith\sthe\sTCL\nExtension\sArchitecture,\sobtained\sfrom\n[https://core.tcl-lang.org/sampleextension/file].\s\sPerhaps\sthis\snew\nversion\swill\ssit\sbetter\swith\ssalmonx's\sstatic\sanalyzer\n[forum:/forumpost/7f0beca9797ee23a|(ref1)],\n[forum:/forumpost/7d5c8b19231ad57f|(ref2)]. +D 2021-06-15T15:36:05.310 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -29,7 +29,7 @@ F autoconf/tea/pkgIndex.tcl.in 3ef61715cf1c7bdcff56947ffadb26bc991ca39d F autoconf/tea/tclconfig/install-sh bdd5e293591621ae60d9824d86a4b1c5f22c3d00 F autoconf/tea/tclconfig/tcl.m4 66ddf0a5d5e4b1d29bff472c0985fd7fa89d0fb5 F autoconf/tea/win/makefile.vc a5ff708245260c2794c6aaa0151efe5403d5896566eaf096747be0d9075284e4 -F autoconf/tea/win/nmakehlp.c 247538ad8e8c508f33c03ec1fbd67d3a07ef6291 +F autoconf/tea/win/nmakehlp.c 190bf8b40f6f90eeb6cbc1e5c13a19fc7ad870e479e0314c88174f71bf9e28a7 F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63 F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6 F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc @@ -1918,7 +1918,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 829343c26ed7b87fafc70de3369625209bad91e79bb7ca2946d5c8d61cc1c3c4 -R 9aa6f2e0346815fa6d5daf16e2359ae5 +P 272a15b9f418fb0b31a9808f7c42c20cf52318035ff98935d8e8519634357e8d +R 097386e0f9bf33b02f625d198897ad8a U drh -Z 993cbec21430496a6c026bc47f824357 +Z 29173b5fde864001fb27d15e020c7b34 diff --git a/manifest.uuid b/manifest.uuid index 2fbcda8cbf..9402113a6f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -272a15b9f418fb0b31a9808f7c42c20cf52318035ff98935d8e8519634357e8d \ No newline at end of file +603b851d7d923d71543760b09a55d72dbbc185ac9c353c954c331c0454992c80 \ No newline at end of file From f54e79405ec3edd606400a08ff84198824927093 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 15 Jun 2021 18:46:06 +0000 Subject: [PATCH 08/16] Fix some minor #ifdef issues so that all of the supported compile-time options continue to build. FossilOrigin-Name: d8cf407046f20b0398f19acd0dab6acb6c742911e21e1003cb5b194dd668d98e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 2 +- src/os_unix.c | 3 +++ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 5c040d1cdb..68cb958313 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sthe\s"nmakehlp.c"\sutility\sprogram\ssources\sassociated\swith\sthe\sTCL\nExtension\sArchitecture,\sobtained\sfrom\n[https://core.tcl-lang.org/sampleextension/file].\s\sPerhaps\sthis\snew\nversion\swill\ssit\sbetter\swith\ssalmonx's\sstatic\sanalyzer\n[forum:/forumpost/7f0beca9797ee23a|(ref1)],\n[forum:/forumpost/7d5c8b19231ad57f|(ref2)]. -D 2021-06-15T15:36:05.310 +C Fix\ssome\sminor\s#ifdef\sissues\sso\sthat\sall\sof\sthe\ssupported\scompile-time\noptions\scontinue\sto\sbuild. +D 2021-06-15T18:46:06.931 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -508,7 +508,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 2189e0e596010a0dc5405d9f14f78db1ee2fa71138c931f5b6ea96610b95bfc1 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 12684b3f19cd103cea97cdf14d0758196d0c646e12a898d7245141a9abfde9a4 -F src/main.c 7a1b7017af16977b298ef5a0b824b1153f1c878f94885a098620c3c1b1078ce9 +F src/main.c 40e10111109abc39a50796ebab08f84df0b0730a5337d533639f78523191acc1 F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -528,7 +528,7 @@ F src/os.c 59ed1f503347e8b5434c0ce7d7d0f02a3f24a72fea8b26d0bba2de8dfaef778b F src/os.h 26890f540b475598cd9881dcc68931377b8d429d3ea3e2eeb64470cde64199f8 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 -F src/os_unix.c efa60c1cb54dba767abbba3c6dd67d3df5ef8aa26e2e499c37f055f56a374068 +F src/os_unix.c feac74a0ba7652c405ba30f61d9e738be717d15899f2915a129ef160a3e5b26b F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 95c255256b13827caf038c8f963d334784073f38ab6ef9d70371d9d04f3c43e0 @@ -1918,7 +1918,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 272a15b9f418fb0b31a9808f7c42c20cf52318035ff98935d8e8519634357e8d -R 097386e0f9bf33b02f625d198897ad8a +P 603b851d7d923d71543760b09a55d72dbbc185ac9c353c954c331c0454992c80 +R 8654acc49485f5126a64e78b631149d4 U drh -Z 29173b5fde864001fb27d15e020c7b34 +Z beca0a8a4d2554cf61d23d5fded72e0d diff --git a/manifest.uuid b/manifest.uuid index 9402113a6f..47bbf078a5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -603b851d7d923d71543760b09a55d72dbbc185ac9c353c954c331c0454992c80 \ No newline at end of file +d8cf407046f20b0398f19acd0dab6acb6c742911e21e1003cb5b194dd668d98e \ No newline at end of file diff --git a/src/main.c b/src/main.c index 732c085a98..9a8939382d 100644 --- a/src/main.c +++ b/src/main.c @@ -4284,7 +4284,7 @@ int sqlite3_test_control(int op, ...){ break; } -#ifdef SQLITE_DEBUG +#if !defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) /* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, *piValue) ** ** If "id" is an integer between 1 and SQLITE_NTUNE then set the value diff --git a/src/os_unix.c b/src/os_unix.c index 750b3e170f..d45fdabab2 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -8068,6 +8068,7 @@ int sqlite3_os_init(void){ } unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#ifndef SQLITE_OMIT_WAL /* Validate lock assumptions */ assert( SQLITE_SHM_NLOCK==8 ); /* Number of available locks */ assert( UNIX_SHM_BASE==120 ); /* Start of locking area */ @@ -8083,6 +8084,8 @@ int sqlite3_os_init(void){ ** DMS UNIX_SHM_BASE+8 128 */ assert( UNIX_SHM_DMS==128 ); /* Byte offset of the deadman-switch */ +#endif + return SQLITE_OK; } From 9d82a2ccfe5d8f5c0a71c29b50b8051eada4378a Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 15 Jun 2021 20:07:16 +0000 Subject: [PATCH 09/16] Fix an incorrect ifdef in the previous check-in. FossilOrigin-Name: 4b2bb46730393292364b2be7db4e73fc8f93cd5a141aaf04f20fe0119deb5ab3 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/main.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 68cb958313..c5c9465312 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\ssome\sminor\s#ifdef\sissues\sso\sthat\sall\sof\sthe\ssupported\scompile-time\noptions\scontinue\sto\sbuild. -D 2021-06-15T18:46:06.931 +C Fix\san\sincorrect\sifdef\sin\sthe\sprevious\scheck-in. +D 2021-06-15T20:07:16.590 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -508,7 +508,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 2189e0e596010a0dc5405d9f14f78db1ee2fa71138c931f5b6ea96610b95bfc1 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 12684b3f19cd103cea97cdf14d0758196d0c646e12a898d7245141a9abfde9a4 -F src/main.c 40e10111109abc39a50796ebab08f84df0b0730a5337d533639f78523191acc1 +F src/main.c 9c06f8dc6137aaa990692ce30db1c00c3e6a574c5a4756640625c19b507c65ec F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -1918,7 +1918,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 603b851d7d923d71543760b09a55d72dbbc185ac9c353c954c331c0454992c80 -R 8654acc49485f5126a64e78b631149d4 +P d8cf407046f20b0398f19acd0dab6acb6c742911e21e1003cb5b194dd668d98e +R c793a2b6fd573c5020d76ea917fab815 U drh -Z beca0a8a4d2554cf61d23d5fded72e0d +Z dfa163831b09887fabddf76674335ea6 diff --git a/manifest.uuid b/manifest.uuid index 47bbf078a5..b1e83968fb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d8cf407046f20b0398f19acd0dab6acb6c742911e21e1003cb5b194dd668d98e \ No newline at end of file +4b2bb46730393292364b2be7db4e73fc8f93cd5a141aaf04f20fe0119deb5ab3 \ No newline at end of file diff --git a/src/main.c b/src/main.c index 9a8939382d..a04a6bc0f2 100644 --- a/src/main.c +++ b/src/main.c @@ -4284,7 +4284,7 @@ int sqlite3_test_control(int op, ...){ break; } -#if !defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) /* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, *piValue) ** ** If "id" is an integer between 1 and SQLITE_NTUNE then set the value From 236bcdf3e4307ac4230b489e8fce22742fac8555 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 16 Jun 2021 11:32:54 +0000 Subject: [PATCH 10/16] Enhanced defense against integer overflow in ALTER TABLE. FossilOrigin-Name: fb7f094e4e0f03622c2e7fa02483c17671a8899c7ad8aba8659177180f406704 --- manifest | 13 ++++++------- manifest.uuid | 2 +- src/alter.c | 6 +++--- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 85461e9276..7fcaf5516a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\ssome\s#ifdefs\sso\sthat\sbuilds\swork\sfor\sall\ssupported\scompile-time\soptions. -D 2021-06-15T20:10:25.201 +C Enhanced\sdefense\sagainst\sinteger\soverflow\sin\sALTER\sTABLE. +D 2021-06-16T11:32:54.576 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -478,7 +478,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c 00212ce60260818eee9ce7d881251ae172f3996db577729a2593d2e3d70551ec +F src/alter.c 774a2a175ec747b55046ec62f5c1208d730ee22b10bdad5f182591fa247946a8 F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c F src/attach.c a514e81758ba7b3a3a0501faf70af6cfc509de8810235db726cfc9f25165e929 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853 @@ -1918,8 +1918,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 603b851d7d923d71543760b09a55d72dbbc185ac9c353c954c331c0454992c80 4b2bb46730393292364b2be7db4e73fc8f93cd5a141aaf04f20fe0119deb5ab3 -R c793a2b6fd573c5020d76ea917fab815 -T +closed 4b2bb46730393292364b2be7db4e73fc8f93cd5a141aaf04f20fe0119deb5ab3 +P ca7d78f7818b4754fd04ea2b618dee1f01e11c6a5acb54951217c0d03df8e187 +R e472ba5ac6b47e2e07dd760592d28813 U drh -Z 83f5ebc6b2c42f5bde61078e332a4e0b +Z a2a26cfc7aeeb72d48e041fe86674b54 diff --git a/manifest.uuid b/manifest.uuid index 57aa523bcb..33ce494a8b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ca7d78f7818b4754fd04ea2b618dee1f01e11c6a5acb54951217c0d03df8e187 \ No newline at end of file +fb7f094e4e0f03622c2e7fa02483c17671a8899c7ad8aba8659177180f406704 \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index f1482cdf08..f998b893c2 100644 --- a/src/alter.c +++ b/src/alter.c @@ -1160,13 +1160,13 @@ static int renameEditSql( const char *zNew, /* New token text */ int bQuote /* True to always quote token */ ){ - int nNew = sqlite3Strlen30(zNew); - int nSql = sqlite3Strlen30(zSql); + i64 nNew = sqlite3Strlen30(zNew); + i64 nSql = sqlite3Strlen30(zSql); sqlite3 *db = sqlite3_context_db_handle(pCtx); int rc = SQLITE_OK; char *zQuot = 0; char *zOut; - int nQuot = 0; + i64 nQuot = 0; char *zBuf1 = 0; char *zBuf2 = 0; From cbe83495ee9da838b6a30bf0392cccece056e29b Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 16 Jun 2021 12:26:01 +0000 Subject: [PATCH 11/16] Adjustments to requirement markings in comments. No changes to code. FossilOrigin-Name: be00e45b723adf64bc78927dc12de3116fd04912a52e5c105a52f235c57698f5 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/sqlite.h.in | 8 ++++---- test/e_select.test | 9 +++++---- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 7fcaf5516a..bb130afb03 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhanced\sdefense\sagainst\sinteger\soverflow\sin\sALTER\sTABLE. -D 2021-06-16T11:32:54.576 +C Adjustments\sto\srequirement\smarkings\sin\scomments.\s\sNo\schanges\sto\scode. +D 2021-06-16T12:26:01.882 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -546,7 +546,7 @@ F src/resolve.c 35630effd4d16d2373caa41bae40a3d71f853f3ad0cb4f572f2ed4b8c350c1e9 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 4fa607bab6bcc580f12dbaf9c800b2250a1e408f10321a1d3bcb1dd30c447e62 F src/shell.c.in f3e91c697f33daae14923355dcadfc26bb0c1eabdb343e5508706893e017a0a6 -F src/sqlite.h.in f450394634eac00bc680c0e91582b818359c6ad61149f49f90fb6ecbd526b51f +F src/sqlite.h.in 8549395aa13361d5dcea04e3a57d680af10f7ee0989c45ebfffe3a3bcb2cdc3d F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e F src/sqliteInt.h ab37a8dd95884fc25ef1eb7b6d53d6674905c67298affc2b5bf947f739096504 @@ -863,7 +863,7 @@ F test/e_fts3.test 17ba7c373aba4d4f5696ba147ee23fd1a1ef70782af050e03e262ca187c5e F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e F test/e_reindex.test 2b0e29344497d9a8a999453a003cb476b6b1d2eef2d6c120f83c2d3a429f3164 F test/e_resolve.test a61751c368b109db73df0f20fc75fb47e166b1d8 -F test/e_select.test f9474205669a7736ef725b29cc7ae9e8601919a3d0ffc0ab30745a028f2a4b61 +F test/e_select.test c5425a423da06d0494119db8361ebfc6de302929f7546ca596d56224137e0360 F test/e_select2.test aceb80ab927d46fba5ce7586ebabf23e2bb0604f F test/e_totalchanges.test b12ee5809d3e63aeb83238dd501a7bca7fd72c10 F test/e_update.test f46c2554d915c9197548681e8d8c33a267e84528 @@ -1918,7 +1918,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 ca7d78f7818b4754fd04ea2b618dee1f01e11c6a5acb54951217c0d03df8e187 -R e472ba5ac6b47e2e07dd760592d28813 +P fb7f094e4e0f03622c2e7fa02483c17671a8899c7ad8aba8659177180f406704 +R 835c1d545e4c21bb73584857e935c084 U drh -Z a2a26cfc7aeeb72d48e041fe86674b54 +Z 85ada50dc9f2e32edaced765f42b5e14 diff --git a/manifest.uuid b/manifest.uuid index 33ce494a8b..76a9945e4d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fb7f094e4e0f03622c2e7fa02483c17671a8899c7ad8aba8659177180f406704 \ No newline at end of file +be00e45b723adf64bc78927dc12de3116fd04912a52e5c105a52f235c57698f5 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 065438b1b8..f8037a2d94 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -4378,17 +4378,17 @@ typedef struct sqlite3_context sqlite3_context; ** ** ^The fifth argument to the BLOB and string binding interfaces controls ** or indicates the lifetime of the object referenced by the third parameter. -** ^These three options exist: -** ^(1) A destructor to dispose of the BLOB or string after SQLite has finished +** These three options exist: +** ^ (1) A destructor to dispose of the BLOB or string after SQLite has finished ** with it may be passed. ^It is called to dispose of the BLOB or string even ** if the call to the bind API fails, except the destructor is not called if ** the third parameter is a NULL pointer or the fourth parameter is negative. -** ^(2) The special constant, [SQLITE_STATIC], may be passsed to indicate that +** ^ (2) The special constant, [SQLITE_STATIC], may be passsed to indicate that ** the application remains responsible for disposing of the object. ^In this ** case, the object and the provided pointer to it must remain valid until ** either the prepared statement is finalized or the same SQL parameter is ** bound to something else, whichever occurs sooner. -** ^(3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the +** ^ (3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the ** object is to be copied prior to the return from sqlite3_bind_*(). ^The ** object and pointer to it must remain valid until then. ^SQLite will then ** manage the lifetime of its private copy. diff --git a/test/e_select.test b/test/e_select.test index c2fdc9ad90..a4e74d30e1 100644 --- a/test/e_select.test +++ b/test/e_select.test @@ -1004,12 +1004,13 @@ do_execsql_test e_select-4.9.0 { INSERT INTO b3 VALUES('dEF', 'dEF'); } {} -# EVIDENCE-OF: R-07284-35990 If the SELECT statement is an aggregate +# EVIDENCE-OF: R-40855-36147 If the SELECT statement is an aggregate # query with a GROUP BY clause, then each of the expressions specified # as part of the GROUP BY clause is evaluated for each row of the -# dataset. Each row is then assigned to a "group" based on the results; -# rows for which the results of evaluating the GROUP BY expressions are -# the same get assigned to the same group. +# dataset according to the processing rules stated below for ORDER BY +# expressions. Each row is then assigned to a "group" based on the +# results; rows for which the results of evaluating the GROUP BY +# expressions are the same get assigned to the same group. # # These tests also show that the following is not untrue: # From d95a6520251132b4d73f9a9d68f72efe9ec62def Mon Sep 17 00:00:00 2001 From: larrybr Date: Wed, 16 Jun 2021 13:26:40 +0000 Subject: [PATCH 12/16] Avoid ominous warning in showdb.c FossilOrigin-Name: f8d7ac0104b76555142ce0d32714594f42d19b311dce2f77f42f92756b5e0c93 --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/showdb.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index bb130afb03..91f197c1f5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Adjustments\sto\srequirement\smarkings\sin\scomments.\s\sNo\schanges\sto\scode. -D 2021-06-16T12:26:01.882 +C Avoid\sominous\swarning\sin\sshowdb.c +D 2021-06-16T13:26:40.463 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1868,7 +1868,7 @@ F tool/replace.tcl 60f91e8dd06ab81f74d213ecbd9c9945f32ac048 F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5 F tool/run-speed-test.sh f95d19fd669b68c4c38b6b475242841d47c66076 -F tool/showdb.c 6554d4af7690404f5b9242cf0349a74b59cafbda95fcf8f31c36303faf8539da +F tool/showdb.c 7cc12c6deeddfe40ba5d948b408730696d8365988da05fcb6b6a90ea4965e2b4 F tool/showjournal.c 5bad7ae8784a43d2b270d953060423b8bd480818 F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/showshm.c a0ab6ec32dd1f11218ca2a4018f8fb875b59414801ab8ceed8b2e69b7b45a809 @@ -1918,7 +1918,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 fb7f094e4e0f03622c2e7fa02483c17671a8899c7ad8aba8659177180f406704 -R 835c1d545e4c21bb73584857e935c084 -U drh -Z 85ada50dc9f2e32edaced765f42b5e14 +P be00e45b723adf64bc78927dc12de3116fd04912a52e5c105a52f235c57698f5 +R ff172fb118f95b7d18532fd66becde9e +U larrybr +Z 9772cb1ad713ae796d8354e91b29d691 diff --git a/manifest.uuid b/manifest.uuid index 76a9945e4d..7fc6a98b90 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -be00e45b723adf64bc78927dc12de3116fd04912a52e5c105a52f235c57698f5 \ No newline at end of file +f8d7ac0104b76555142ce0d32714594f42d19b311dce2f77f42f92756b5e0c93 \ No newline at end of file diff --git a/tool/showdb.c b/tool/showdb.c index 0356ef88f5..3c91967ed1 100644 --- a/tool/showdb.c +++ b/tool/showdb.c @@ -753,7 +753,7 @@ static void decode_trunk_page( n = decodeInt32(&a[4]); for(i=0; i Date: Wed, 16 Jun 2021 15:56:09 +0000 Subject: [PATCH 13/16] Adjust the mkshellc.tcl script so that the generated code always uses unix-style line endings. FossilOrigin-Name: 9f69af4dbcb273519fa87b7868f3792560fb71b192f4ffe53b8b465334da5ae4 --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/mkshellc.tcl | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 91f197c1f5..4645177348 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sominous\swarning\sin\sshowdb.c -D 2021-06-16T13:26:40.463 +C Adjust\sthe\smkshellc.tcl\sscript\sso\sthat\sthe\sgenerated\scode\salways\suses\nunix-style\sline\sendings. +D 2021-06-16T15:56:09.899 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1852,7 +1852,7 @@ F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c F tool/mkopcodeh.tcl 130b88697da6ec5b89b41844d955d08fb62c2552e889dec8c7bcecb28d8f50bd F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa F tool/mkpragmatab.tcl ae5585ae76ca26e4d6ccd5ea9cdebaf5efefb318bf989497a0e846cd711d9ab1 -F tool/mkshellc.tcl 70a9978e363b0f3280ca9ce1c46d72563ff479c1930a12a7375e3881b7325712 +F tool/mkshellc.tcl 5fe7e518112b262e25726f248c0f33dd153192867453984b6af0a76a88e97cb2 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f @@ -1918,7 +1918,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 be00e45b723adf64bc78927dc12de3116fd04912a52e5c105a52f235c57698f5 -R ff172fb118f95b7d18532fd66becde9e -U larrybr -Z 9772cb1ad713ae796d8354e91b29d691 +P f8d7ac0104b76555142ce0d32714594f42d19b311dce2f77f42f92756b5e0c93 +R 8096b459bc52999a686a07ce38e2633d +U drh +Z d9829fc7ef6888439b3e9b0991becf3b diff --git a/manifest.uuid b/manifest.uuid index 7fc6a98b90..1de9c03cff 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f8d7ac0104b76555142ce0d32714594f42d19b311dce2f77f42f92756b5e0c93 \ No newline at end of file +9f69af4dbcb273519fa87b7868f3792560fb71b192f4ffe53b8b465334da5ae4 \ No newline at end of file diff --git a/tool/mkshellc.tcl b/tool/mkshellc.tcl index 4f0e17f83d..46c2a528fe 100644 --- a/tool/mkshellc.tcl +++ b/tool/mkshellc.tcl @@ -11,6 +11,7 @@ # set topdir [file dir [file dir [file normal $argv0]]] set out stdout +fconfigure stdout -translation binary puts $out {/* DO NOT EDIT! ** This file is automatically generated by the script in the canonical ** SQLite source tree at tool/mkshellc.tcl. That script combines source From 7379b455a58166ad7a19e08cbd3b44e1ea3f2226 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 16 Jun 2021 16:56:56 +0000 Subject: [PATCH 14/16] Do not run test file sessionbig.test on 32-bit platforms. It uses too much memory. FossilOrigin-Name: 75e53215fe436999cdc70434c6ae96d3ce6642c71528cce9f5715fe1b1b81876 --- ext/session/sessionbig.test | 5 +++++ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ext/session/sessionbig.test b/ext/session/sessionbig.test index 688025d80c..80ce00a0f7 100644 --- a/ext/session/sessionbig.test +++ b/ext/session/sessionbig.test @@ -25,6 +25,11 @@ if {[permutation]=="session_strm" || [permutation]=="session_eec"} { return } +if {$::tcl_platform(pointerSize)<8} { + finish_test + return +} + set testprefix sessionbig forcedelete test.db2 diff --git a/manifest b/manifest index 4645177348..9e56aba45d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Adjust\sthe\smkshellc.tcl\sscript\sso\sthat\sthe\sgenerated\scode\salways\suses\nunix-style\sline\sendings. -D 2021-06-16T15:56:09.899 +C Do\snot\srun\stest\sfile\ssessionbig.test\son\s32-bit\splatforms.\sIt\suses\stoo\smuch\smemory. +D 2021-06-16T16:56:56.405 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -446,7 +446,7 @@ F ext/session/sessionH.test b17afdbd3b8f17e9bab91e235acf167cf35485db2ab2df0ea889 F ext/session/session_common.tcl f613174665456b2d916ae8df3e5735092a1c1712f36f46840172e9a01e8cc53e F ext/session/session_speed_test.c dcf0ef58d76b70c8fbd9eab3be77cf9deb8bc1638fed8be518b62d6cbdef88b3 F ext/session/sessionat.test efe88965e74ff1bc2af9c310b28358c02d420c1fb2705cc7a28f0c1cc142c3ec -F ext/session/sessionbig.test 5851fc7f9981e2ccf1c7d9e7cb239dc530db07d5e878ebbb2f6d993d27872a43 +F ext/session/sessionbig.test 890ade19e3f80f3d3a3e83821ff79c5e2af906a67ecb5450879f0015cadf101e F ext/session/sessiondiff.test ad13dd65664bae26744e1f18eb3cbd5588349b7e9118851d8f9364248d67bcec F ext/session/sessionfault.test da273f2712b6411e85e71465a1733b8501dbf6f7 F ext/session/sessionfault2.test dd593f80b6b4786f7adfe83c5939620bc505559770cc181332da26f29cddd7bb @@ -1918,7 +1918,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 f8d7ac0104b76555142ce0d32714594f42d19b311dce2f77f42f92756b5e0c93 -R 8096b459bc52999a686a07ce38e2633d -U drh -Z d9829fc7ef6888439b3e9b0991becf3b +P 9f69af4dbcb273519fa87b7868f3792560fb71b192f4ffe53b8b465334da5ae4 +R 06f7b4439ba296963e7ccd835b648d5b +U dan +Z 21e3b53cf1eababb187a92aca9194afb diff --git a/manifest.uuid b/manifest.uuid index 1de9c03cff..2346af70ec 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9f69af4dbcb273519fa87b7868f3792560fb71b192f4ffe53b8b465334da5ae4 \ No newline at end of file +75e53215fe436999cdc70434c6ae96d3ce6642c71528cce9f5715fe1b1b81876 \ No newline at end of file From 755708538d592f782306d9780895e57180ce483a Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 16 Jun 2021 18:58:01 +0000 Subject: [PATCH 15/16] Omit a handful of tests from pager1.test when testing SQLITE_ENABLE_ZIPVFS builds. FossilOrigin-Name: c3036c28259c1375cd2c480c9ca0ce7f9aa1e952be4f110dde49b2b7d72a43b7 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/pager1.test | 9 +++++++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 9e56aba45d..65fcae1ce3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\srun\stest\sfile\ssessionbig.test\son\s32-bit\splatforms.\sIt\suses\stoo\smuch\smemory. -D 2021-06-16T16:56:56.405 +C Omit\sa\shandful\sof\stests\sfrom\spager1.test\swhen\stesting\sSQLITE_ENABLE_ZIPVFS\sbuilds. +D 2021-06-16T18:58:01.955 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1254,7 +1254,7 @@ F test/oserror.test 1fc9746b83d778e70d115049747ba19c7fba154afce7cc165b09feb6ca6a F test/ossfuzz.c 9636dad2092a05a32110df0ca06713038dd0c43dd89a77dabe4b8b0d71096715 F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17 F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f -F test/pager1.test 293c7ad1f19a07e548179b97534c6588249d4e40058b378ea26e75cc84d936f5 +F test/pager1.test a4e438c344663ad7f0bf6e880cacae7531bdf7d960db15a3db4751273ecee06d F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71 F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370 F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e @@ -1918,7 +1918,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 9f69af4dbcb273519fa87b7868f3792560fb71b192f4ffe53b8b465334da5ae4 -R 06f7b4439ba296963e7ccd835b648d5b +P 75e53215fe436999cdc70434c6ae96d3ce6642c71528cce9f5715fe1b1b81876 +R a30b9f26bd7f73e8281d608010515622 U dan -Z 21e3b53cf1eababb187a92aca9194afb +Z 55702563d6bc46337e90dc74dba260ce diff --git a/manifest.uuid b/manifest.uuid index 2346af70ec..5ac45689de 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -75e53215fe436999cdc70434c6ae96d3ce6642c71528cce9f5715fe1b1b81876 \ No newline at end of file +c3036c28259c1375cd2c480c9ca0ce7f9aa1e952be4f110dde49b2b7d72a43b7 \ No newline at end of file diff --git a/test/pager1.test b/test/pager1.test index 5c3f7a8ea3..a1e06d15cc 100644 --- a/test/pager1.test +++ b/test/pager1.test @@ -1764,6 +1764,12 @@ tv delete #------------------------------------------------------------------------- # Test specal "PRAGMA journal_mode=OFF" test cases. # +# Do not run these tests for SQLITE_ENABLE_ZIPVFS builds. Such builds +# cause the pager to enter the error state if a statement transaction +# cannot be rolled back due to a prior "PRAGMA journal_mode=OFF". Which +# causes these tests to fail. +# +if {[info commands zip_register]==""} { faultsim_delete_and_reopen do_execsql_test pager1-14.1.1 { PRAGMA journal_mode = OFF; @@ -1788,8 +1794,11 @@ do_catchsql_test pager1-14.1.4 { } {1 {UNIQUE constraint failed: t1.rowid}} do_execsql_test pager1-14.1.5 { COMMIT; +} +do_execsql_test pager1-14.1.6 { SELECT * FROM t1; } {1 2 2 2} +} #------------------------------------------------------------------------- # Test opening and closing the pager sub-system with different values From 9c32c914b80cb05ed2daf342418e60440e5c303c Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 16 Jun 2021 19:23:24 +0000 Subject: [PATCH 16/16] Add an ALWAYS on a branch in STAT4-only logic that is now always true due to check-in [c21bc5a2353e660f]. FossilOrigin-Name: 7bd55eee1ac63cf6d5699ce85bc5a29bf51afdf7a80bce44937fa833947a40f4 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/where.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 65fcae1ce3..12a3b0afb6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Omit\sa\shandful\sof\stests\sfrom\spager1.test\swhen\stesting\sSQLITE_ENABLE_ZIPVFS\sbuilds. -D 2021-06-16T18:58:01.955 +C Add\san\sALWAYS\son\sa\sbranch\sin\sSTAT4-only\slogic\sthat\sis\snow\salways\ntrue\sdue\sto\scheck-in\s[c21bc5a2353e660f]. +D 2021-06-16T19:23:24.924 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -631,7 +631,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c c8ec20a1ca161d5635a4f19c2a4efec2e006e19a8a61f272bf6bce1c80ab7436 F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/walker.c 7342becedf3f8a26f9817f08436bdf8b56ad69af83705f6b9320a0ad3092c2ac -F src/where.c dc062832c30aa6c5f17805c1235b2b621cd9db506412d5d3ef0799d26ae3396f +F src/where.c 4caf843825c6292440113258fefaa6f747fd570c6915628957e42e39529988f5 F src/whereInt.h 9248161dd004f625ce5d3841ca9b99fed3fc8d61522cf76340fc5217dbe1375b F src/wherecode.c 9f1f65d11437b25cd0a1497a170514c785f19ce6ad9d3e6fc73719cb5a49012f F src/whereexpr.c 5a9c9f5d2dac4bcdcaae3035034b4667523f731df228e0bb1d4efc669efa9da5 @@ -1918,7 +1918,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 75e53215fe436999cdc70434c6ae96d3ce6642c71528cce9f5715fe1b1b81876 -R a30b9f26bd7f73e8281d608010515622 -U dan -Z 55702563d6bc46337e90dc74dba260ce +P c3036c28259c1375cd2c480c9ca0ce7f9aa1e952be4f110dde49b2b7d72a43b7 +R 6b8a0a7cf847af9edb1fb9387491b821 +U drh +Z a27f3d8d5b7841a565ad9f6d2ecda9f9 diff --git a/manifest.uuid b/manifest.uuid index 5ac45689de..fd4c15710d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c3036c28259c1375cd2c480c9ca0ce7f9aa1e952be4f110dde49b2b7d72a43b7 \ No newline at end of file +7bd55eee1ac63cf6d5699ce85bc5a29bf51afdf7a80bce44937fa833947a40f4 \ No newline at end of file diff --git a/src/where.c b/src/where.c index bfff5a39f4..5315520db4 100644 --- a/src/where.c +++ b/src/where.c @@ -2719,7 +2719,7 @@ static int whereLoopAddBtreeIndex( tRowcnt nOut = 0; if( nInMul==0 && pProbe->nSample - && pNew->u.btree.nEq<=pProbe->nSampleCol + && ALWAYS(pNew->u.btree.nEq<=pProbe->nSampleCol) && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect)) && OptimizationEnabled(db, SQLITE_Stat4) ){