From b16425d05a29faeec7dd77d71c0f466f8eb2340d Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 10 Jul 2020 11:12:36 +0000 Subject: [PATCH 1/7] Fix a broken assert() in fts3 that could fail when handling corrupt records. FossilOrigin-Name: 5124732370fd53c93314c9c79b4251bd46ce81c2e7aa4f59e2c1889cc4263d5a --- ext/fts3/fts3.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- test/fts3corrupt4.test | 15 +++++++++++++++ 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 5296f9d6e7..892fc36d33 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -2068,7 +2068,7 @@ static void fts3PutDeltaVarint( sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */ sqlite3_int64 iVal /* Write this value to the list */ ){ - assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) ); + assert_fts3_nc( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) ); *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev); *piPrev = iVal; } diff --git a/manifest b/manifest index a80c023d2c..3212b63538 100644 --- a/manifest +++ b/manifest @@ -1,13 +1,13 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\shandling\sof\sanother\scorrupt\sdatabase\scase\sin\sfts3. -D 2020-07-09T21:29:34.103 +C Fix\sa\sbroken\sassert()\sin\sfts3\sthat\scould\sfail\swhen\shandling\scorrupt\srecords. +D 2020-07-10T11:12:36.503 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 F configure a97f98dfff699495aef66ae3d9c424345778a663f583e0d6e7522670518f87c1 x F configure.ac 40d01e89cb325c28b33f5957e61fede0bd17da2b5e37d9b223a90c8a318e88d4 F doc/lemon.html 1edc0f916e771212792d4d077aedc05168bf13fd65d64d41b2c13e46ac0063a8 -F ext/fts3/fts3.c 5ffabd0d13210fb9cfe1c08184201282722adfeea49cd9e8e2ae29d1fefd7fcb +F ext/fts3/fts3.c b8ed676b377b1f7f07596aa6272ea623acf087f529a3007b75d1f4908919e6b9 F ext/fts3/fts3_write.c 723ed1b11ed46ad1b3a23c0d69fa39e77986783a82d5711bf87a5ce29e0a3b52 F ext/lsm1/lsm_unix.c 11e0a5c19d754a4e1d93dfad06de8cc201f10f886b8e61a4c599ed34e334fc24 F ext/misc/decimal.c c1897f624893d1c12e3c879d97ca7d1c4a36cae10d32afe632779de78c4aaa4f @@ -34,7 +34,7 @@ F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acb F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9 F test/filter1.test 6c483ecf7886c8843a8612c021aa23f33c581f584151f251842b3a3592c95ac8 F test/fkey5.test 321fd41e8754389526b2b8e8769348dc9ff23a65d4d48b19c27df17459e82ec5 -F test/fts3corrupt4.test 07cabb7a5a3a4d5bbae08b537e0d9e22eebdb49b7b7a98646ef8c258308ae66f +F test/fts3corrupt4.test b77dcdfa207c11d7966e71837c518cb0639c78fd109dec89c65d45a3bfd36701 F test/fuzzdata8.db 0ae860b36b79fd41cafddc9e6602358b2d5c331cf200283221e659f86e196c0c F test/gencol1.test b05e6c5edb9b10d48efb634ed07342441bddc89d225043e17095c36e567521a0 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e @@ -46,7 +46,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 610ee8d5dc855fd163daa3c93b44db7874463d69df5a01ab4113b725a031b9d4 -R f506df3e64449a71a2d48ebddc1578d7 +P ccff8cb8267d4c5605484f7a35c1836937f20b3d6879fe84cd84dc24bbbffc77 +R abe8831689bcc88a9040a035ac96873e U dan -Z 1f24dc1574d5c512fe643a8c300eaca2 +Z 07dd0ef315f5745bd324608854712dcf diff --git a/manifest.uuid b/manifest.uuid index 83875f548d..746aa4e462 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ccff8cb8267d4c5605484f7a35c1836937f20b3d6879fe84cd84dc24bbbffc77 \ No newline at end of file +5124732370fd53c93314c9c79b4251bd46ce81c2e7aa4f59e2c1889cc4263d5a \ No newline at end of file diff --git a/test/fts3corrupt4.test b/test/fts3corrupt4.test index 85d62b33a4..90a7c7d4c2 100644 --- a/test/fts3corrupt4.test +++ b/test/fts3corrupt4.test @@ -6266,5 +6266,20 @@ do_catchsql_test 45.2 { INSERT INTO x1(x1) VALUES( 'merge=1' ) } {1 {database disk image is malformed}} +#------------------------------------------------------------------------- +reset_db +set saved $sqlite_fts3_enable_parentheses +set sqlite_fts3_enable_parentheses 1 +do_execsql_test 46.1 { + CREATE VIRTUAL TABLE t0 USING fts3(a INTEGER PRIMARY KEY,b,c,d); + INSERT INTO t0_segdir VALUES(0,0,0,0,'0 42',X'0001310301c9000103323334050d8000f200000461616161050101020200000462626262050101030200'); +} {} + +do_catchsql_test 46.2 { + SELECT * FROM t0 + WHERE t0 MATCH x'2b0a312b0a312a312a2a0b5d0a0b0b0a312a0a0b0b0a312a0b310a392a0b0a27312a2a0b5d0a312a0b310a31315d0b310a312a316d2a0b313b15bceaa50a312a0b0a27312a2a0b5d0a312a0b310a312b0b2a310a312a0b2a0b2a0b2e5d0a0bff313336e34a2a312a0b0a3c310b0a0b4b4b0b4b2a4bec40322b2a0b310a0a312a0a0a0a0a0a0a0a0a0b310a312a2a2a0b5d0a0b0b0a312a0b310a312a0b0a4e4541530b310a5df5ced70a0a0a0a0a4f520a0a0a0a0a0a0a312a0b0a4e4541520b310a5d616161610a0a0a0a4f520a0a0a0a0a0a312b0a312a312a0a0a0a0a0a0a004a0b0a310b220a0b0a310a4a22310a0b0a7e6fe0e0e030e0e0e0e0e01176e02000e0e0e0e0e01131320226310a0b0a310a4a22310a0b0a310a766f8b8b4ee0e0300ae0090909090909090909090909090909090909090909090909090909090909090947aaaa540b09090909090909090909090909090909090909090909090909090909090909fae0e0f2f22164e0e0f273e07fefefef7d6dfafafafa6d6d6d6d'; +} {1 {database disk image is malformed}} + +set sqlite_fts3_enable_parentheses $saved finish_test From 6af305de1eeff5d94cacafd555f3fa6b8015b5eb Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 10 Jul 2020 21:43:53 +0000 Subject: [PATCH 2/7] Remove unnecessary code from the window functions implementation. FossilOrigin-Name: 1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc --- manifest | 19 ++++++++++--------- manifest.uuid | 2 +- src/expr.c | 10 ++++------ src/select.c | 15 --------------- src/sqliteInt.h | 1 - src/window.c | 1 - 6 files changed, 15 insertions(+), 33 deletions(-) diff --git a/manifest b/manifest index 3212b63538..f6a1015369 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\sa\sbroken\sassert()\sin\sfts3\sthat\scould\sfail\swhen\shandling\scorrupt\srecords. -D 2020-07-10T11:12:36.503 +C Remove\sunnecessary\scode\sfrom\sthe\swindow\sfunctions\simplementation. +D 2020-07-10T21:43:53.474 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -16,19 +16,20 @@ F main.mk b1cd0bc6aedad7ebb667b7f74f835f932f60ee33be2a5c3051fd93eb465f5c75 F src/btree.c e8e4a7e4727f0ead6433fdafeff347bf078fec39bee55a24441c3481e5b85164 F src/btreeInt.h 19267385aa3bc00067d48e0e4ba83ae82dc08b0c15a3b3df20ea653cb462b5bf F src/build.c ba1bbe563a3dc02d5fed20537603181e5289c13ea30ae5e775f552e7557adbfa -F src/expr.c a3ab84399b3415f66d2d0c25f5bcd98ef465c0c07ea1f19bf2a418b1c8fcad74 +F src/expr.c 73bd71448acb4f9a69c8c05e30281a9e982bb7de8f91a9c93b742dec09280442 F src/parse.y b6b4b02f8cc8f94ac1d93a922543e0344dbb30b04877898736c01ec7ec03eaaa F src/pragma.c ae499b5ab8f4e833f67e28bf2322500e9aa612aadf12581d1324333f848d8b51 F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf F src/resolve.c 79cee37182fea66703f90365b8b0a646ed7e9bfa9238b91fa90dfc74258b940e -F src/select.c 860daa05592ed1b38f6266f067fa020b539548ab929aa60fa59e7681e7f3f8cb +F src/select.c 2a5099399d7e3bf2956c2ec019262e000831b87c095aa9150939a28a3a743c8f F src/shell.c.in 81fa23ac1a3d6ac9ed13e9ae711a3d8806396ca7cc12c5d6a2e2536f70b0c7ad -F src/sqliteInt.h f89ed824bc55b6bd90ca692518f85eeb22f8962d46e0e12cad989d4aee1e7b8c +F src/sqliteInt.h 8366e482a1330e9c103c9c9053c53894e373daf1fb9dd65bd953ffc0b3ad7a8b F src/test1.c fe56c4bcaa2685ca9aa25d817a0ee9345e189aff4a5a71a3d8ba946c7776feb8 F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef +F src/window.c ddfe21354731f5a7f29f39d7a9150c578191ce33b05b90875d7bc2cf7afd1751 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9 @@ -46,7 +47,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P ccff8cb8267d4c5605484f7a35c1836937f20b3d6879fe84cd84dc24bbbffc77 -R abe8831689bcc88a9040a035ac96873e -U dan -Z 07dd0ef315f5745bd324608854712dcf +P 5124732370fd53c93314c9c79b4251bd46ce81c2e7aa4f59e2c1889cc4263d5a +R ea3bc4c92fd2088a0776485a898bb94e +U drh +Z 8fbb30c3fa3021d385b71d6a00620564 diff --git a/manifest.uuid b/manifest.uuid index 746aa4e462..739a48e326 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5124732370fd53c93314c9c79b4251bd46ce81c2e7aa4f59e2c1889cc4263d5a \ No newline at end of file +1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 9b63a569bc..d569637366 100644 --- a/src/expr.c +++ b/src/expr.c @@ -52,12 +52,10 @@ char sqlite3ExprAffinity(const Expr *pExpr){ op = pExpr->op; if( op==TK_SELECT ){ assert( pExpr->flags&EP_xIsSelect ); - if( ALWAYS(pExpr->x.pSelect) - && pExpr->x.pSelect->pEList - && ALWAYS(pExpr->x.pSelect->pEList->a[0].pExpr) - ){ - return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); - } + assert( pExpr->x.pSelect!=0 ); + assert( pExpr->x.pSelect->pEList!=0 ); + assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 ); + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); } if( op==TK_REGISTER ) op = pExpr->op2; #ifndef SQLITE_OMIT_CAST diff --git a/src/select.c b/src/select.c index 2df58fccd0..b22c167a56 100644 --- a/src/select.c +++ b/src/select.c @@ -175,21 +175,6 @@ void sqlite3SelectDelete(sqlite3 *db, Select *p){ if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1); } -/* -** Delete all the substructure for p, but keep p allocated. Redefine -** p to be a single SELECT where every column of the result set has a -** value of NULL. -*/ -void sqlite3SelectReset(Parse *pParse, Select *p){ - if( ALWAYS(p) ){ - clearSelect(pParse->db, p, 0); - memset(&p->iLimit, 0, sizeof(Select) - offsetof(Select,iLimit)); - p->pEList = sqlite3ExprListAppend(pParse, 0, - sqlite3ExprAlloc(pParse->db,TK_NULL,0,0)); - p->pSrc = sqlite3DbMallocZero(pParse->db, sizeof(SrcList)); - } -} - /* ** Return a pointer to the right-most SELECT statement in a compound. */ diff --git a/src/sqliteInt.h b/src/sqliteInt.h index a862f4a6c0..f64ef5d237 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -4248,7 +4248,6 @@ int sqlite3Select(Parse*, Select*, SelectDest*); Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*, Expr*,ExprList*,u32,Expr*); void sqlite3SelectDelete(sqlite3*, Select*); -void sqlite3SelectReset(Parse*, Select*); Table *sqlite3SrcListLookup(Parse*, SrcList*); int sqlite3IsReadOnly(Parse*, Table*, int); void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); diff --git a/src/window.c b/src/window.c index 8656f51b02..ab8b5ce139 100644 --- a/src/window.c +++ b/src/window.c @@ -1082,7 +1082,6 @@ int sqlite3WindowRewrite(Parse *pParse, Select *p){ assert( pParse->db->mallocFailed ); sqlite3ErrorToParser(pParse->db, SQLITE_NOMEM); } - sqlite3SelectReset(pParse, p); } return rc; } From a1085f06402378a4a46b0ffe63efc219e9471806 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 11 Jul 2020 16:42:28 +0000 Subject: [PATCH 3/7] Improved detection of a corrupt database schema. Fix for a problem discovered by dbsqlfuzz. FossilOrigin-Name: 30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 6 +++++- test/fuzzdata8.db | Bin 1523712 -> 1526784 bytes 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index f6a1015369..207e47c191 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Remove\sunnecessary\scode\sfrom\sthe\swindow\sfunctions\simplementation. -D 2020-07-10T21:43:53.474 +C Improved\sdetection\sof\sa\scorrupt\sdatabase\sschema.\sFix\sfor\sa\sproblem\sdiscovered\nby\sdbsqlfuzz. +D 2020-07-11T16:42:28.397 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -13,7 +13,7 @@ F ext/lsm1/lsm_unix.c 11e0a5c19d754a4e1d93dfad06de8cc201f10f886b8e61a4c599ed34e3 F ext/misc/decimal.c c1897f624893d1c12e3c879d97ca7d1c4a36cae10d32afe632779de78c4aaa4f F ext/misc/ieee754.c bb6bd8e9eeeda5a7ac82839fcab5c0b8156b0532165387cc5458a97f60047b5d F main.mk b1cd0bc6aedad7ebb667b7f74f835f932f60ee33be2a5c3051fd93eb465f5c75 -F src/btree.c e8e4a7e4727f0ead6433fdafeff347bf078fec39bee55a24441c3481e5b85164 +F src/btree.c e8a64df5ebd1e9d5184ff89fc110e048cdf7b77cc300eb51c48969ef4e71c23b F src/btreeInt.h 19267385aa3bc00067d48e0e4ba83ae82dc08b0c15a3b3df20ea653cb462b5bf F src/build.c ba1bbe563a3dc02d5fed20537603181e5289c13ea30ae5e775f552e7557adbfa F src/expr.c 73bd71448acb4f9a69c8c05e30281a9e982bb7de8f91a9c93b742dec09280442 @@ -36,7 +36,7 @@ F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19 F test/filter1.test 6c483ecf7886c8843a8612c021aa23f33c581f584151f251842b3a3592c95ac8 F test/fkey5.test 321fd41e8754389526b2b8e8769348dc9ff23a65d4d48b19c27df17459e82ec5 F test/fts3corrupt4.test b77dcdfa207c11d7966e71837c518cb0639c78fd109dec89c65d45a3bfd36701 -F test/fuzzdata8.db 0ae860b36b79fd41cafddc9e6602358b2d5c331cf200283221e659f86e196c0c +F test/fuzzdata8.db ef83ab1c8d130daabef304cb440bae2215208120de741b8476de66e16237808d F test/gencol1.test b05e6c5edb9b10d48efb634ed07342441bddc89d225043e17095c36e567521a0 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e F test/speedtest1.c a8b5afe72d78ff365012aba48d3f0c579e957facb7630f765f58a6ae4656d20d @@ -47,7 +47,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 5124732370fd53c93314c9c79b4251bd46ce81c2e7aa4f59e2c1889cc4263d5a -R ea3bc4c92fd2088a0776485a898bb94e +P 1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc +R ff70a39063eed43e9dd438f7258ce866 U drh -Z 8fbb30c3fa3021d385b71d6a00620564 +Z d54b70f0c5aff12e31d9bd93382c262a diff --git a/manifest.uuid b/manifest.uuid index 739a48e326..b8d5fa2b63 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc \ No newline at end of file +30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 00915abec5..76069a33eb 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8772,7 +8772,11 @@ int sqlite3BtreeInsert( assert( pPage->intKey || pX->nKey>=0 ); assert( pPage->leaf || !pPage->intKey ); if( pPage->nFree<0 ){ - rc = btreeComputeFreeSpace(pPage); + if( pCur->eState>CURSOR_INVALID ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = btreeComputeFreeSpace(pPage); + } if( rc ) return rc; } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 77e2b9fa15a0bef2a790961f44f27ae4e126cf86..d45392ac7cee5a946f03d6ece6bfa3721c8a3997 100644 GIT binary patch delta 14991 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 delta 14785 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 Date: Sat, 11 Jul 2020 16:45:20 +0000 Subject: [PATCH 4/7] Add second test case for the improvement in [30735432]. FossilOrigin-Name: 1bd18ca35bdbf3034591bf8981fd3a985f0920379bc4dc81e0e6a819667998e9 --- manifest | 13 +++++++------ manifest.uuid | 2 +- test/corruptL.test | 25 +++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 207e47c191..ec2c9628b1 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Improved\sdetection\sof\sa\scorrupt\sdatabase\sschema.\sFix\sfor\sa\sproblem\sdiscovered\nby\sdbsqlfuzz. -D 2020-07-11T16:42:28.397 +C Add\ssecond\stest\scase\sfor\sthe\simprovement\sin\s[30735432]. +D 2020-07-11T16:45:20.109 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -32,6 +32,7 @@ F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef F src/window.c ddfe21354731f5a7f29f39d7a9150c578191ce33b05b90875d7bc2cf7afd1751 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 +F test/corruptL.test 01cfda6b28f463d1713ac72a101e65549250568129ce5317ec6729729ecaf477 F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9 F test/filter1.test 6c483ecf7886c8843a8612c021aa23f33c581f584151f251842b3a3592c95ac8 F test/fkey5.test 321fd41e8754389526b2b8e8769348dc9ff23a65d4d48b19c27df17459e82ec5 @@ -47,7 +48,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc -R ff70a39063eed43e9dd438f7258ce866 -U drh -Z d54b70f0c5aff12e31d9bd93382c262a +P 30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b +R d3f6de902e4d6c47e7dd36f8c5263899 +U dan +Z 2a53c05567155af386423ef070399f4a diff --git a/manifest.uuid b/manifest.uuid index b8d5fa2b63..22e8604301 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b \ No newline at end of file +1bd18ca35bdbf3034591bf8981fd3a985f0920379bc4dc81e0e6a819667998e9 \ No newline at end of file diff --git a/test/corruptL.test b/test/corruptL.test index 3c26f1d215..6a2fa94fc1 100644 --- a/test/corruptL.test +++ b/test/corruptL.test @@ -1266,5 +1266,30 @@ do_test 15.0 { do_execsql_test 15.1 { UPDATE c1 SET c= NOT EXISTS(SELECT 1 FROM c1 ORDER BY (SELECT 1 FROM c1 ORDER BY a)) +10 WHERE d BETWEEN 4 AND 7; } {} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 16.0 { + CREATE TABLE t1(w, x, y, z, UNIQUE(w, x), UNIQUE(y, z)); + INSERT INTO t1 VALUES(1, 1, 1, 1); + + CREATE TABLE t1idx(x, y, i INTEGER, PRIMARY KEY(x)) WITHOUT ROWID; + INSERT INTO t1idx VALUES(10, NULL, 5); + + PRAGMA writable_schema = 1; + UPDATE sqlite_master SET rootpage = ( + SELECT rootpage FROM sqlite_master WHERE name='t1idx' + ) WHERE type = 'index'; +} + +db close +sqlite3 db test.db + +do_catchsql_test 16.1 { + PRAGMA writable_schema = ON; + INSERT INTO t1(rowid, w, x, y, z) VALUES(5, 10, 11, 10, NULL); +} {1 {database disk image is malformed}} + finish_test + From bbc9e1908aa14d392833266ca1d1966e3f8359e1 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 13 Jul 2020 11:06:30 +0000 Subject: [PATCH 5/7] Fix an integer overflow bug in fts5 triggered by a corrupt record. FossilOrigin-Name: 49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 --- ext/fts5/fts5_index.c | 4 +- ext/fts5/test/fts5corrupt3.test | 215 ++++++++++++++++++++++++++++++++ manifest | 12 +- manifest.uuid | 2 +- 4 files changed, 225 insertions(+), 8 deletions(-) diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index f33617465d..5e1155c2a9 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -2321,11 +2321,11 @@ static void fts5LeafSeek( } search_success: - pIter->iLeafOffset = iOff + nNew; - if( pIter->iLeafOffset>n || nNew<1 ){ + if( (i64)iOff+nNew>n || nNew<1 ){ p->rc = FTS5_CORRUPT; return; } + pIter->iLeafOffset = iOff + nNew; pIter->iTermLeafOffset = pIter->iLeafOffset; pIter->iTermLeafPgno = pIter->iLeafPgno; diff --git a/ext/fts5/test/fts5corrupt3.test b/ext/fts5/test/fts5corrupt3.test index 4e0ae64a9a..25aa094e97 100644 --- a/ext/fts5/test/fts5corrupt3.test +++ b/ext/fts5/test/fts5corrupt3.test @@ -10108,6 +10108,221 @@ do_catchsql_test 68.1 { INSERT INTO t1(t1) SELECT x FROM t2; } {1 {database disk image is malformed}} +#------------------------------------------------------------------------- +reset_db +do_test 69.0 { + sqlite3 db {} + db deserialize [decode_hexdb { +.open --hexdb +| size 32768 pagesize 4096 filename crash-31c462b8b665d0.db +| page 1 offset 0 +| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. +| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 08 .....@ ........ +| 32: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................ +| 96: 00 00 00 00 0d 0f c7 00 07 0d 92 00 0f 8d 0f 36 ...............6 +| 112: 0e cb 0e 6b 0e 0e 0d b6 0d 92 00 00 00 00 00 00 ...k............ +| 3472: 00 00 22 08 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet +| 3488: 32 74 32 08 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE +| 3504: 20 74 32 28 78 29 56 07 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta +| 3520: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c +| 3536: 6f 6e 66 69 67 07 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB +| 3552: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k +| 3568: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v) +| 3584: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 06 WITHOUT ROWID[. +| 3600: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d +| 3616: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize +| 3632: 06 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't +| 3648: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN +| 3664: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE +| 3680: 59 2c 20 73 7a 20 42 4c 4f 42 29 5e 05 07 17 21 Y, sz BLOB)^...! +| 3696: 21 01 81 07 74 61 62 6c 65 74 31 5f 63 6f 6e 74 !...tablet1_cont +| 3712: 65 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 05 43 52 entt1_content.CR +| 3728: 45 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 EATE TABLE 't1_c +| 3744: 6f 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 ontent'(id INTEG +| 3760: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 ER PRIMARY KEY, +| 3776: 63 39 2c 20 63 31 2c 20 63 32 29 69 04 07 17 19 c9, c1, c2)i.... +| 3792: 19 01 81 2d 74 61 62 6c 65 74 31 5f 69 64 78 74 ...-tablet1_idxt +| 3808: 31 5f 69 64 78 04 43 52 45 41 54 45 20 54 41 42 1_idx.CREATE TAB +| 3824: 4c 45 20 27 74 31 5f 69 64 78 27 28 73 65 67 69 LE 't1_idx'(segi +| 3840: 64 2c 20 74 65 72 6d 2c 20 70 67 6e 6f 2c 20 50 d, term, pgno, P +| 3856: 52 49 4d 41 52 59 20 4b 45 59 28 73 65 67 69 64 RIMARY KEY(segid +| 3872: 2c 20 74 65 72 6d 29 29 20 57 49 54 48 4f 55 54 , term)) WITHOUT +| 3888: 20 52 4f 57 49 44 55 03 07 17 1b 1b 01 81 01 74 ROWIDU........t +| 3904: 61 62 6c 65 74 31 5f 64 61 74 61 74 31 5f 64 61 ablet1_datat1_da +| 3920: 74 61 03 43 52 45 41 54 45 20 54 41 42 4c 45 20 ta.CREATE TABLE +| 3936: 27 74 31 5f 64 61 74 61 27 28 69 64 20 49 4e 54 't1_data'(id INT +| 3952: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 EGER PRIMARY KEY +| 3968: 2c 20 62 6c 6f 63 6b 20 42 4c 4f 42 29 38 02 06 , block BLOB)8.. +| 3984: 17 11 11 08 5f 74 61 62 6c 65 74 31 74 31 43 52 ...._tablet1t1CR +| 4000: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 EATE VIRTUAL TAB +| 4016: 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 35 LE t1 USING fts5 +| 4032: 28 61 2c 62 2c 63 29 00 00 00 00 00 00 00 00 00 (a,b,c)......... +| page 3 offset 8192 +| 0: 0d 00 00 00 03 0c 94 00 0f e6 0f ef 0c 94 00 00 ................ +| 3216: 00 00 00 00 86 4a 84 80 80 80 80 01 04 00 8d 18 .....J.......... +| 3232: 00 00 03 2b 02 30 30 01 02 06 01 02 06 01 02 06 ...+.00......... +| 3248: 1f 02 03 01 02 03 01 02 03 01 08 32 30 31 36 30 ...........20160 +| 3264: 36 30 39 01 02 07 01 02 07 01 02 07 01 01 34 01 609...........4. +| 3280: 02 05 01 02 05 01 02 05 01 01 35 01 02 04 01 02 ..........5..... +| 3296: 04 01 02 04 02 07 30 30 30 30 30 30 30 1c 02 04 ......0000000... +| 3312: 01 02 04 01 02 04 01 06 62 69 6e 61 72 79 03 06 ........binary.. +| 3328: 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 ................ +| 3344: 02 02 03 06 00 02 02 03 06 01 02 02 03 06 01 02 ................ +| 3360: 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 02 ................ +| 3376: 03 06 01 02 02 03 06 01 02 02 01 08 63 6f 6d 70 ............comp +| 3392: 69 6c 65 72 01 02 02 01 02 02 01 02 02 01 06 64 iler...........d +| 3408: 62 73 74 61 74 07 02 03 01 02 03 01 02 03 02 04 bstat........... +| 3424: 65 62 75 67 04 02 02 01 02 02 01 02 02 01 06 65 ebug...........e +| 3440: 6e 61 62 6c 65 07 02 02 01 02 02 01 02 02 01 02 nable........... +| 3456: 02 01 02 02 01 02 02 01 02 02 01 02 02 01 02 02 ................ +| 3472: 01 02 02 01 02 02 01 02 02 01 02 02 01 02 02 01 ................ +| 3488: 01 02 01 02 02 01 02 02 01 02 02 01 02 02 01 02 ................ +| 3504: 02 01 02 02 02 08 78 74 65 6e 73 69 6f 6e 1f 02 ......xtension.. +| 3520: 04 01 02 04 01 02 04 01 04 66 74 73 34 1a 02 03 .........fts4... +| 3536: 01 02 03 01 02 03 04 01 35 0d 02 03 01 02 03 01 ........5....... +| 3552: 02 03 01 03 67 63 63 01 aa 03 01 02 03 01 02 03 ....gcc......... +| 3568: 02 06 65 6f 70 6f 6c 79 10 02 03 02 02 03 01 02 ..eopoly........ +| 3584: 03 01 05 6a 73 6f 6e 31 13 02 03 01 02 03 01 02 ...json1........ +| 3600: 03 01 04 6c 6f 61 64 1f 02 03 01 02 03 01 02 03 ...load......... +| 3616: 01 03 6d 61 78 1c 02 02 01 02 02 01 02 02 02 05 ..max........... +| 3632: 65 6d 6f 72 79 1c 02 03 01 02 03 01 02 03 04 04 emory........... +| 3648: 73 79 73 35 16 02 03 01 02 03 01 02 03 01 06 6e sys5...........n +| 3664: 6f 63 61 73 65 02 06 01 02 02 03 06 01 02 02 03 ocase........... +| 3680: 06 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 ................ +| 3696: 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 ................ +| 3712: 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 ................ +| 3728: 02 01 04 6f 6d 69 74 1f 02 02 01 02 02 01 02 01 ...omit......... +| 3744: ff ff ff ff ff ff ff ff f0 00 00 00 00 00 01 02 ................ +| 3760: 58 81 96 4d 01 06 01 02 02 03 06 01 02 02 03 06 X..M............ +| 3776: 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 ................ +| 3792: 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 ................ +| 3808: 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 02 ................ +| 3824: 01 0a 74 68 72 65 61 64 73 61 66 65 22 02 02 01 ..threadsafe.... +| 3840: 02 02 01 02 02 01 04 76 74 61 62 07 02 04 01 02 .......vtab..... +| 3856: 04 01 02 04 01 01 78 01 06 01 01 02 01 06 01 01 ......x......... +| 3872: 02 01 06 01 1e 02 01 06 01 01 02 01 06 01 01 02 ................ +| 3888: 01 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 ................ +| 3904: 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 ................ +| 3920: 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 01 ................ +| 3936: 00 02 01 06 01 01 02 01 06 01 01 02 01 06 01 01 ................ +| 3952: 02 01 06 01 01 02 01 06 01 01 02 01 06 01 01 02 ................ +| 3968: 01 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 ................ +| 3984: 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 ................ +| 4000: 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 01 ................ +| 4016: 01 02 01 06 01 01 02 01 06 01 01 02 01 06 01 01 ................ +| 4032: 02 01 06 01 01 02 01 06 01 01 02 04 15 13 0c 0c ................ +| 4048: 12 44 13 11 0f 47 13 0f 0b 0e 11 10 0f 0e 10 0f .D...G.......... +| 4064: 44 0f 10 40 15 0f 07 01 03 00 14 24 5a 24 24 0f D..@.......$Z$$. +| 4080: 0a 03 00 24 00 00 00 00 01 01 01 00 01 01 01 01 ...$............ +| page 4 offset 12288 +| 0: 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +| 4080: 00 00 00 00 00 00 00 00 00 00 05 04 09 0c 01 02 ................ +| page 5 offset 16384 +| 0: 0d 00 00 00 24 0c 0a 00 0f d8 0f af 0f 86 0f 74 ....$..........t +| 16: 0f 61 0f 4e 0f 2f 0f 0f 0e ef 0e d7 0e be 0e a5 .a.N./.......... +| 32: 0e 8d 0e 74 0e 5b 0e 40 0e 24 0e 08 0d ef 0d d5 ...t.[.@.$...... +| 48: 0d bb 0d a0 0d 84 0d 68 0d 4f 0d 00 00 00 00 00 .......h.O...... +| 3072: 00 00 00 00 00 00 00 00 00 00 18 24 05 00 25 0f ...........$..%. +| 3088: 19 54 48 52 45 41 44 53 41 46 45 3d 30 58 42 49 .THREADSAFE=0XBI +| 3104: 4e 41 52 59 18 23 05 00 25 0f 19 54 48 52 45 41 NARY.#..%..THREA +| 3120: 44 53 41 46 45 3d 30 58 4e 4f 43 41 53 45 17 22 DSAFE=0XNOCASE.. +| 3136: 05 00 25 0f 17 54 48 52 45 41 44 53 41 46 45 3d ..%..THREADSAFE= +| 3152: 30 58 52 54 52 49 4d 1f 21 05 00 33 0f 19 4f 4d 0XRTRIM.!..3..OM +| 3168: 49 54 20 4c 4f 41 44 20 45 58 54 45 4e 53 49 4f IT LOAD EXTENSIO +| 3184: 4e 58 42 49 4e 41 52 59 1f 20 05 00 33 d3 19 4f NXBINARY. ..3..O +| 3200: 4d 49 54 28 2c 4f 41 44 b2 04 55 85 44 54 e5 34 MIT(,OAD..U.DT.4 +| 3216: 94 f4 e5 84 e4 f4 34 15 34 51 e1 f0 50 03 30 f1 ......4.4Q..P.0. +| 3232: 74 f4 d4 95 42 04 c4 f4 14 42 04 55 85 44 54 e5 t...B....B.U.DT. +| 3248: 34 94 f4 e5 85 25 45 24 94 d1 f1 e0 50 03 30 f1 4....%E$....P.0. +| 3264: 94 d4 15 82 04 d4 54 d4 f5 25 93 d3 53 03 03 03 ......T..%..S... +| 3280: 03 03 03 05 84 24 94 e4 15 25 91 f1 d0 50 03 30 .....$...%...P.0 +| 3296: f1 94 d4 15 82 04 d4 54 d4 f5 25 93 d3 53 03 03 .......T..%..S.. +| 3312: 03 03 03 03 05 84 e4 f4 34 15 34 51 e1 c0 50 03 ........4.4Q..P. +| 3328: 30 f1 74 d4 15 82 04 d4 54 d4 f5 25 93 d3 53 03 0.t.....T..%..S. +| 3344: 03 03 03 03 03 05 85 25 45 24 94 d1 81 b0 50 02 .......%E$....P. +| 3360: 50 f1 94 54 e4 14 24 c4 52 05 25 45 24 54 55 84 P..T..$.R.%E$TU. +| 3376: 24 94 e4 15 25 91 81 a0 50 02 50 f1 94 54 e4 14 $...%...P.P..T.. +| 3392: 24 c4 52 05 25 45 24 54 55 84 e4 f4 34 15 34 51 $.R.%E$TU...4.4Q +| 3408: 71 90 50 02 50 f1 74 54 e4 14 24 c4 52 05 25 45 q.P.P.tT..$.R.%E +| 3424: 24 54 55 85 25 45 24 94 d1 a1 80 50 02 90 f1 94 $TU.%E$....P.... +| 3440: 54 e4 14 24 c4 52 04 d4 54 d5 35 95 33 55 84 24 T..$.R..T.5.3U.$ +| 3456: 94 e4 15 25 91 a1 70 50 02 90 f1 94 54 e4 14 24 ...%..pP....T..$ +| 3472: c4 52 04 d4 54 d5 35 95 33 55 84 e4 f4 34 15 34 .R..T.5.3U...4.4 +| 3488: 51 91 60 50 02 90 f1 74 54 e4 14 24 c4 52 04 d4 Q.`P...tT..$.R.. +| 3504: 54 d5 35 95 33 55 85 25 45 24 94 d1 81 50 50 02 T.5.3U.%E$...PP. +| 3520: 50 f1 94 54 e4 14 24 c4 52 04 a5 34 f4 e3 15 84 P..T..$.R..4.... +| 3536: 24 94 e4 15 25 91 81 40 50 02 50 f1 94 54 e4 14 $...%..@P.P..T.. +| 3552: 24 c4 52 04 a5 34 f4 e3 15 84 e4 f4 34 15 34 51 $.R..4......4.4Q +| 3568: 71 30 50 02 4f f1 74 54 e4 14 24 c4 52 04 a5 34 q0P.O.tT..$.R..4 +| 3584: f4 e3 15 85 25 45 24 94 d1 a1 20 50 02 90 f1 94 ....%E$... P.... +| 3600: 54 e4 14 24 c4 52 04 74 54 f5 04 f4 c5 95 84 24 T..$.R.tT......$ +| 3616: 94 e4 15 25 91 a1 10 50 02 90 f1 94 54 e4 14 24 ...%...P....T..$ +| 3632: c4 52 04 74 54 f5 04 f4 c5 95 84 e4 f4 34 15 34 .R.tT........4.4 +| 3648: 51 91 00 50 02 90 f1 74 54 e4 14 24 c4 51 f4 74 Q..P...tT..$.Q.t +| 3664: 54 f5 04 f4 c5 95 85 25 45 24 94 d1 70 f0 50 02 T......%E$..p.P. +| 3680: 30 f1 94 54 e4 14 24 c5 20 46 54 53 35 58 42 49 0..T..$. FTS5XBI +| 3696: 4e 41 52 59 17 0e 05 00 23 0f 19 45 4e 41 42 4c NARY....#..ENABL +| 3712: 45 20 46 54 53 35 58 4f 4f 43 41 53 45 16 0d 05 E FTS5XOOCASE... +| 3728: 00 23 0f 17 45 4e 41 42 4c 45 20 46 54 53 35 58 .#..ENABLE FTS5X +| 3744: 52 54 52 49 4d 17 0c 05 00 23 0f 19 45 4e 41 42 RTRIM....#..ENAB +| 3760: 4c 45 20 46 54 53 34 58 42 49 4e 41 52 59 97 0b LE FTS4XBINARY.. +| 3776: 05 00 23 0f 19 45 4e 41 42 4c 45 20 46 54 53 34 ..#..ENABLE FTS4 +| 3792: 58 4e 4f 43 41 53 45 16 0a 05 00 23 0f 17 45 4e XNOCASE....#..EN +| 3808: 41 42 4c 45 20 46 54 53 34 58 52 54 52 49 4d 1e ABLE FTS4XRTRIM. +| 3824: 09 05 00 3e 5f 19 45 4e 41 42 4c 45 20 44 42 53 ...>_.ENABLE DBS +| 3840: 44 41 54 20 56 54 41 42 58 42 49 4e 41 52 59 1e DAT VTABXBINARY. +| 3856: 08 05 00 31 0f 19 45 4e 41 42 4c 45 20 44 42 53 ...1..ENABLE DBS +| 3872: 54 41 54 20 56 54 41 42 58 4e 4f 43 4d e3 45 1d TAT VTABXNOCM.E. +| 3888: 07 05 00 31 0f 17 45 4e 41 42 4c 45 20 44 42 53 ...1..ENABLE DBS +| 3904: 54 41 54 20 56 54 41 42 58 52 54 52 49 4d 11 06 TAT VTABXRTRIM.. +| 3920: 05 00 17 0f 19 44 45 42 55 47 58 42 49 4e 41 52 .....DEBUGXBINAR +| 3936: 59 11 05 05 00 17 0f 19 44 45 42 55 47 58 4e 4f Y.......DEBUGXNO +| 3952: 43 41 53 45 10 02 02 50 08 5f 17 44 45 42 55 47 CASE...P._.DEBUG +| 3968: 58 52 54 52 49 4d 27 03 05 00 44 0f 19 43 4f 4d XRTRIM'...D..COM +| 3984: 50 49 4c 45 52 3d 67 63 63 2d 35 2e 34 2e 30 20 PILER=gcc-5.4.0 +| 4000: 32 30 31 36 30 36 30 39 58 42 49 4e 41 52 59 27 20160609XBINARY' +| 4016: 02 05 00 43 0f 19 43 4f 4d 50 49 4c 45 52 3d 67 ...C..COMPILER=g +| 4032: 63 63 2d 35 2e 34 2e 30 20 32 30 31 36 30 36 30 cc-5.4.0 2016060 +| 4048: 39 58 4e 4f 43 41 53 45 26 01 05 00 43 c9 17 43 9XNOCASE&...C..C +| 4064: 4f 4d 50 49 4c 47 02 3d 67 63 63 2d 35 2e 34 2e OMPILG.=gcc-5.4. +| 4080: 30 20 32 30 31 36 30 36 30 39 58 52 54 52 49 4d 0 20160609XRTRIM +| page 6 offset 20480 +| 0: 0d 00 00 00 24 0e e0 00 0f f8 0f f0 0f e8 0f e0 ....$........... +| 16: 0f d8 0f d0 0f c8 0f c0 0f b8 0f b0 0f a8 0f a0 ................ +| 32: 0f 98 0f 90 0f 88 0f 80 0f 78 0f 70 0f 68 0f 60 .........x.p.h.` +| 48: 0f 58 0f 50 0f 48 0f 40 0f 38 00 00 00 00 00 00 .X.P.H.@.8...... +| 3808: 06 24 03 00 12 02 01 01 06 23 03 00 12 02 01 01 .$.......#...... +| 3824: 06 22 03 00 12 02 01 01 06 21 03 00 12 03 01 01 .........!...... +| 3840: 06 20 03 00 12 03 01 01 06 1f 03 00 12 03 01 01 . .............. +| 3856: 06 1e 03 00 12 03 01 01 06 1d 03 00 12 03 01 01 ................ +| 3872: 06 1c 03 00 12 03 01 01 06 1b 03 00 12 02 01 01 ................ +| 3888: 06 1a 03 00 12 02 01 01 06 19 03 00 12 02 01 01 ................ +| 3904: 06 18 03 00 12 02 01 01 06 17 03 00 12 02 01 01 ................ +| 3920: 06 16 03 00 12 02 01 01 06 15 03 00 12 02 01 01 ................ +| 3936: 06 14 03 00 12 02 01 01 06 13 03 00 12 02 01 01 ................ +| 3952: 06 12 03 00 12 02 01 01 06 11 03 00 12 02 01 01 ................ +| 3968: 06 10 03 00 12 02 01 01 06 1f 03 00 12 02 01 01 ................ +| 3984: 06 0e 03 00 12 02 01 01 06 0d 03 00 12 02 01 01 ................ +| 4000: 06 0c 03 00 12 02 01 01 06 0b 03 00 12 02 01 01 ................ +| 4016: 06 0a 03 00 12 02 01 01 06 09 03 00 12 03 01 01 ................ +| 4032: 06 08 03 00 12 03 01 01 06 07 03 00 12 03 01 01 ................ +| 4048: 06 06 03 00 12 01 01 01 06 05 03 00 12 01 01 01 ................ +| 4064: 06 04 03 00 12 01 01 01 06 03 03 00 12 06 01 01 ................ +| 4080: 06 02 03 00 12 06 01 01 06 01 03 00 12 06 01 01 ................ +| page 7 offset 24576 +| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................ +| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version. +| page 8 offset 28672 +| 0: 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +| 4048: 00 00 00 00 00 00 11 03 02 2b 69 6e 74 65 67 72 .........+integr +| 4064: 69 74 79 2d 63 68 65 63 6b 09 00 00 00 00 00 00 ity-check....... +| end crash-31c462b8b665d0.db +}]} {} + + +do_catchsql_test 69.2 { + SELECT * FROM t1 WHERE a MATCH 'fx*' +} {1 {database disk image is malformed}} sqlite3_fts5_may_be_corrupt 0 finish_test diff --git a/manifest b/manifest index ec2c9628b1..7fb5e5719d 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Add\ssecond\stest\scase\sfor\sthe\simprovement\sin\s[30735432]. -D 2020-07-11T16:45:20.109 +C Fix\san\sinteger\soverflow\sbug\sin\sfts5\striggered\sby\sa\scorrupt\srecord. +D 2020-07-13T11:06:30.315 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -9,6 +9,8 @@ F configure.ac 40d01e89cb325c28b33f5957e61fede0bd17da2b5e37d9b223a90c8a318e88d4 F doc/lemon.html 1edc0f916e771212792d4d077aedc05168bf13fd65d64d41b2c13e46ac0063a8 F ext/fts3/fts3.c b8ed676b377b1f7f07596aa6272ea623acf087f529a3007b75d1f4908919e6b9 F ext/fts3/fts3_write.c 723ed1b11ed46ad1b3a23c0d69fa39e77986783a82d5711bf87a5ce29e0a3b52 +F ext/fts5/fts5_index.c de14c9a30f45e2b847ff9284b14776d9d07961e545e8f1546a6aa3f915af721f +F ext/fts5/test/fts5corrupt3.test 7afe0fea5b2160798fdc3306395048768c6fc13acefc0e7129d4075b6e1bb224 F ext/lsm1/lsm_unix.c 11e0a5c19d754a4e1d93dfad06de8cc201f10f886b8e61a4c599ed34e334fc24 F ext/misc/decimal.c c1897f624893d1c12e3c879d97ca7d1c4a36cae10d32afe632779de78c4aaa4f F ext/misc/ieee754.c bb6bd8e9eeeda5a7ac82839fcab5c0b8156b0532165387cc5458a97f60047b5d @@ -48,7 +50,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b -R d3f6de902e4d6c47e7dd36f8c5263899 +P 1bd18ca35bdbf3034591bf8981fd3a985f0920379bc4dc81e0e6a819667998e9 +R 43097d6a212fb3bde30bde7120d335a2 U dan -Z 2a53c05567155af386423ef070399f4a +Z bd29e1b14f7ec3369b0d887f7b4d4b83 diff --git a/manifest.uuid b/manifest.uuid index 22e8604301..34d4b08854 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1bd18ca35bdbf3034591bf8981fd3a985f0920379bc4dc81e0e6a819667998e9 \ No newline at end of file +49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 \ No newline at end of file From 27da907f8eea868f6eae12f39b7d489bd1c11866 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 13 Jul 2020 15:20:27 +0000 Subject: [PATCH 6/7] Fix a problem causing queries containing window functions to ignore collation sequences under some circumstances. FossilOrigin-Name: e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7 --- manifest | 13 ++++++------ manifest.uuid | 2 +- src/window.c | 2 ++ test/window1.test | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 7fb5e5719d..a1b6958070 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\san\sinteger\soverflow\sbug\sin\sfts5\striggered\sby\sa\scorrupt\srecord. -D 2020-07-13T11:06:30.315 +C Fix\sa\sproblem\scausing\squeries\scontaining\swindow\sfunctions\sto\signore\scollation\ssequences\sunder\ssome\scircumstances. +D 2020-07-13T15:20:27.736 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -31,7 +31,7 @@ F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef -F src/window.c ddfe21354731f5a7f29f39d7a9150c578191ce33b05b90875d7bc2cf7afd1751 +F src/window.c 0dec178bfa541c757d15a2be78f34aea36393a0966600366810e5f8739ccf370 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 F test/corruptL.test 01cfda6b28f463d1713ac72a101e65549250568129ce5317ec6729729ecaf477 @@ -43,6 +43,7 @@ F test/fuzzdata8.db ef83ab1c8d130daabef304cb440bae2215208120de741b8476de66e16237 F test/gencol1.test b05e6c5edb9b10d48efb634ed07342441bddc89d225043e17095c36e567521a0 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e F test/speedtest1.c a8b5afe72d78ff365012aba48d3f0c579e957facb7630f765f58a6ae4656d20d +F test/window1.test e52b81fff0c3cb122a1240f336688eb81bea2967a99c4ddb78969adec7aadc2a F tool/lemon.c 600a58b9d1b8ec5419373982428e927ca208826edacb91ca42ab94514d006039 F tool/mkautoconfamal.sh f62353eb6c06ab264da027fd4507d09914433dbdcab9cb011cdc18016f1ab3b8 F tool/mkpragmatab.tcl ae5585ae76ca26e4d6ccd5ea9cdebaf5efefb318bf989497a0e846cd711d9ab1 @@ -50,7 +51,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 1bd18ca35bdbf3034591bf8981fd3a985f0920379bc4dc81e0e6a819667998e9 -R 43097d6a212fb3bde30bde7120d335a2 +P 49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 +R 18df21e3eeb9dc795d1a995e52f5b385 U dan -Z bd29e1b14f7ec3369b0d887f7b4d4b83 +Z 7954a7e23c93e850aa318d75407d6e75 diff --git a/manifest.uuid b/manifest.uuid index 34d4b08854..f49c48a4a6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 \ No newline at end of file +e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7 \ No newline at end of file diff --git a/src/window.c b/src/window.c index ab8b5ce139..602af784a9 100644 --- a/src/window.c +++ b/src/window.c @@ -803,6 +803,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup); } if( p->pSub ){ + int f = pExpr->flags & EP_Collate; assert( ExprHasProperty(pExpr, EP_Static)==0 ); ExprSetProperty(pExpr, EP_Static); sqlite3ExprDelete(pParse->db, pExpr); @@ -813,6 +814,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ pExpr->iColumn = (iCol<0 ? p->pSub->nExpr-1: iCol); pExpr->iTable = p->pWin->iEphCsr; pExpr->y.pTab = p->pTab; + pExpr->flags = f; } if( pParse->db->mallocFailed ) return WRC_Abort; break; diff --git a/test/window1.test b/test/window1.test index 618d95e685..dbaf4388fb 100644 --- a/test/window1.test +++ b/test/window1.test @@ -1947,4 +1947,58 @@ do_execsql_test 63.3 { FROM t1; } {{}} +#------------------------------------------------------------------------- +reset_db +do_execsql_test 64.1 { + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'abcd'); + INSERT INTO t1 VALUES(2, 'BCDE'); + INSERT INTO t1 VALUES(3, 'cdef'); + INSERT INTO t1 VALUES(4, 'DEFG'); +} + +do_execsql_test 64.2 { + SELECT rowid, max(b COLLATE nocase)||'' + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase)||''; +} {1 abcd 2 BCDE 3 cdef 4 DEFG} + +do_execsql_test 64.3 { + SELECT count() OVER (), rowid, max(b COLLATE nocase)||'' + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase)||''; +} {4 1 abcd 4 2 BCDE 4 3 cdef 4 4 DEFG} + +do_execsql_test 64.4 { + SELECT count() OVER (), rowid, max(b COLLATE nocase) + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase); +} {4 1 abcd 4 2 BCDE 4 3 cdef 4 4 DEFG} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 65.1 { + CREATE TABLE t1(c1); + INSERT INTO t1 VALUES('abcd'); +} +do_execsql_test 65.2 { + SELECT max(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; +} {1} + +do_execsql_test 65.3 { + SELECT + count() OVER (), + group_concat(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; +} {1 1} + +do_execsql_test 65.4 { + SELECT COUNT() OVER () LIKE lead(102030) OVER( + ORDER BY sum('abcdef' COLLATE nocase) IN (SELECT 54321) + ) + FROM t1; +} {{}} + finish_test From 5b107654e965973e68c88f90a09a3cc53bac9d8b Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 13 Jul 2020 15:35:08 +0000 Subject: [PATCH 7/7] Readd the ALWAYS() macro that was removed by [f7a74f89dbd58b47] as the condition is no longer reachable due to the previous check-in. FossilOrigin-Name: 9cb03beae42d814a1b1b69f72865fde502d3f443313ec29edd010d1de40225eb --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index a1b6958070..c182bbb7ca 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\sa\sproblem\scausing\squeries\scontaining\swindow\sfunctions\sto\signore\scollation\ssequences\sunder\ssome\scircumstances. -D 2020-07-13T15:20:27.736 +C Readd\sthe\sALWAYS()\smacro\sthat\swas\sremoved\sby\s[f7a74f89dbd58b47]\sas\sthe\ncondition\sis\sno\slonger\sreachable\sdue\sto\sthe\sprevious\scheck-in. +D 2020-07-13T15:35:08.219 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -18,7 +18,7 @@ F main.mk b1cd0bc6aedad7ebb667b7f74f835f932f60ee33be2a5c3051fd93eb465f5c75 F src/btree.c e8a64df5ebd1e9d5184ff89fc110e048cdf7b77cc300eb51c48969ef4e71c23b F src/btreeInt.h 19267385aa3bc00067d48e0e4ba83ae82dc08b0c15a3b3df20ea653cb462b5bf F src/build.c ba1bbe563a3dc02d5fed20537603181e5289c13ea30ae5e775f552e7557adbfa -F src/expr.c 73bd71448acb4f9a69c8c05e30281a9e982bb7de8f91a9c93b742dec09280442 +F src/expr.c 90039a043658ce78c3237ba5064c0934b7294120f6adc387f8d0fba306028154 F src/parse.y b6b4b02f8cc8f94ac1d93a922543e0344dbb30b04877898736c01ec7ec03eaaa F src/pragma.c ae499b5ab8f4e833f67e28bf2322500e9aa612aadf12581d1324333f848d8b51 F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf @@ -51,7 +51,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 -R 18df21e3eeb9dc795d1a995e52f5b385 -U dan -Z 7954a7e23c93e850aa318d75407d6e75 +P e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7 +R 6bb073a35e650c3614329dfe9addd72f +U drh +Z 0642ca58347e016bdf51c35b901ea5bc diff --git a/manifest.uuid b/manifest.uuid index f49c48a4a6..880efef3d2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7 \ No newline at end of file +9cb03beae42d814a1b1b69f72865fde502d3f443313ec29edd010d1de40225eb \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index d569637366..abc4b12cf6 100644 --- a/src/expr.c +++ b/src/expr.c @@ -198,7 +198,7 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ && ALWAYS(!ExprHasProperty(p, EP_xIsSelect)) ){ int i; - for(i=0; ix.pList->nExpr; i++){ + for(i=0; ALWAYS(ix.pList->nExpr); i++){ if( ExprHasProperty(p->x.pList->a[i].pExpr, EP_Collate) ){ pNext = p->x.pList->a[i].pExpr; break;