From 5c0666d9e32ff96b6b7aee15071be8ef57e4fd37 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 28 Sep 2019 11:19:56 +0000 Subject: [PATCH] In FTS3/4, the poslist end marker must be larger than any other possible poslist value, even on a corrupt poslist. FossilOrigin-Name: 752679aea5a6bbde24cbf39e2fa018f7dd1c226d463ca4bd74125303b2255170 --- ext/fts3/fts3.c | 35 ++++++++++++++++++----------------- manifest | 14 +++++++------- manifest.uuid | 2 +- test/fuzzdata8.db | Bin 1348608 -> 1357824 bytes 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 5a5d44738c..2e19d6889f 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -308,6 +308,18 @@ SQLITE_EXTENSION_INIT1 #endif +/* +** The following are copied from sqliteInt.h. +** +** Constants for the largest and smallest possible 64-bit signed integers. +** These macros are designed to work correctly on both 32-bit and 64-bit +** compilers. +*/ +#ifndef SQLITE_AMALGAMATION +# define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) +# define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) +#endif + static int fts3EvalNext(Fts3Cursor *pCsr); static int fts3EvalStart(Fts3Cursor *pCsr); static int fts3TermSegReaderCursor( @@ -2086,10 +2098,11 @@ static void fts3ColumnlistCopy(char **pp, char **ppPoslist){ } /* -** Value used to signify the end of an position-list. This is safe because -** it is not possible to have a document with 2^31 terms. +** Value used to signify the end of an position-list. This must be +** as large or larger than any value that might appear on the +** position-list, even a position list that has been corrupted. */ -#define POSITION_LIST_END 0x7fffffff +#define POSITION_LIST_END LARGEST_INT64 /* ** This function is used to help parse position-lists. When this function is @@ -2165,14 +2178,14 @@ static int fts3PoslistMerge( fts3GetVarint32(&p1[1], &iCol1); if( iCol1==0 ) return FTS_CORRUPT_VTAB; } - else if( *p1==POS_END ) iCol1 = POSITION_LIST_END; + else if( *p1==POS_END ) iCol1 = 0x7fffffff; else iCol1 = 0; if( *p2==POS_COLUMN ){ fts3GetVarint32(&p2[1], &iCol2); if( iCol2==0 ) return FTS_CORRUPT_VTAB; } - else if( *p2==POS_END ) iCol2 = POSITION_LIST_END; + else if( *p2==POS_END ) iCol2 = 0x7fffffff; else iCol2 = 0; if( iCol1==iCol2 ){ @@ -3182,18 +3195,6 @@ static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){ return rc; } -/* -** The following are copied from sqliteInt.h. -** -** Constants for the largest and smallest possible 64-bit signed integers. -** These macros are designed to work correctly on both 32-bit and 64-bit -** compilers. -*/ -#ifndef SQLITE_AMALGAMATION -# define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) -# define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) -#endif - /* ** If the numeric type of argument pVal is "integer", then return it ** converted to a 64-bit signed integer. Otherwise, return a copy of diff --git a/manifest b/manifest index 95e913cce4..a963b23fde 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\srequirement\smarks\sdue\sto\schanges\sin\sdocumentation\swording. -D 2019-09-27T17:36:37.590 +C In\sFTS3/4,\sthe\sposlist\send\smarker\smust\sbe\slarger\sthan\sany\sother\spossible\s\nposlist\svalue,\seven\son\sa\scorrupt\sposlist. +D 2019-09-28T11:19:56.478 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -81,7 +81,7 @@ F ext/fts3/README.content fdc666a70d5257a64fee209f97cf89e0e6e32b51 F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d -F ext/fts3/fts3.c 32e913e6678b7bc65bef6dbfc071d4ae27e72ef5a95bc4052d3546c5999dfb31 +F ext/fts3/fts3.c a01da95e840a6ddb14d0a14b35c9017a8b034b08511ca97af716f00df102fb3f F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h 74384e28b778a057f1467529715668b98f3f12f52eeb564fd6ae1e894125c00c F ext/fts3/fts3_aux.c 96708c8b3a7d9b8ca1b68ea2b7e503e283f20e95f145becadedfad096dbd0f34 @@ -1014,7 +1014,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db e7a86fd83dda151d160445d542e32e5c6019c541b3a74c2a525b6ac640639711 -F test/fuzzdata8.db d55b3b6f211a2f1b05cf2800b0b3a6498d77717d77e52c080dce38b40a053d9e +F test/fuzzdata8.db c75b0fd1d28c262f9c3a9428393ff9c420ea5bdbe0b33c557a971915a94bab71 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1845,7 +1845,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 3bcb9cc104e0265a600b03415ad955187fc6445ea8e46dc656412cba5bc1d621 -R bf33d1ae74eb7b45bdc44e5948224bd7 +P 326cdc16f4db23c1d17596e4ef8d9d7abc672d48665950029ba53fd40c1b2d99 +R ed248b7a304ff8fe9b8e405158c64edf U drh -Z 5c422efa861a37adb89a01abf7aa0d68 +Z e9bd16f73bdbdc86a0b51cacc7a31ea5 diff --git a/manifest.uuid b/manifest.uuid index cdf13467b7..3ad7d0a8dd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -326cdc16f4db23c1d17596e4ef8d9d7abc672d48665950029ba53fd40c1b2d99 \ No newline at end of file +752679aea5a6bbde24cbf39e2fa018f7dd1c226d463ca4bd74125303b2255170 \ No newline at end of file diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 50f74a5ee69f06c3a6b2276f24b801fa5359326b..80c1ad007919e3b04f7753ad29c6f551539178a0 100644 GIT binary patch delta 23832 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