From b43ac0021ff4f9e389551fc36b57664e265d4bc0 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 18 Feb 2019 12:16:03 +0000 Subject: [PATCH] Fix an assert() that might not be true if the %_segdir table of FTS3 contains corrupt entries. FossilOrigin-Name: a6509ca3dc2602c7d0376230ee63c1bb4c4066f007e77e9ac20d8eee966e5e13 --- ext/fts3/fts3_write.c | 4 +++- manifest | 14 +++++++------- manifest.uuid | 2 +- test/fuzzdata8.db | Bin 980992 -> 987136 bytes 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index 130a7fbdea..a788be7e02 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -1348,7 +1348,9 @@ static int fts3SegReaderNext( /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf ** blocks have already been traversed. */ - assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock ); +#ifdef CORRUPT_DB + assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock || CORRUPT_DB ); +#endif if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){ return SQLITE_OK; } diff --git a/manifest b/manifest index 5f67f503cc..b2fe3366be 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sassert()\sthat\smight\sbe\sfalse\sfor\sa\scorrupt\sdatabase. -D 2019-02-16T22:45:55.998 +C Fix\san\sassert()\sthat\smight\snot\sbe\strue\sif\sthe\s%_segdir\stable\sof\sFTS3\scontains\ncorrupt\sentries. +D 2019-02-18T12:16:03.611 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 178d8eb6840771149cee40b322d1b3be30d330198c522c903c1b66fb5a1bfca4 @@ -98,7 +98,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3 F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004 F ext/fts3/fts3_unicode.c 4b9af6151c29b35ed09574937083cece7c31e911f69615e168a39677569b684d F ext/fts3/fts3_unicode2.c 416eb7e1e81142703520d284b768ca2751d40e31fa912cae24ba74860532bf0f -F ext/fts3/fts3_write.c 3732d0495b248a23a8f92af3d582c5d910d607b2bf54985e81a3d4d09b4745ea +F ext/fts3/fts3_write.c 8174c14b1027c01751c5671878927dc855507bc3248848f91cebe3950b7da24a F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100 F ext/fts3/tool/fts3cov.sh c331d006359456cf6f8f953e37f2b9c7d568f3863f00bb5f7eb87fea4ac01b73 @@ -992,7 +992,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 3fc78e65dfe0be9df9e262075d5a335f18f627da47dfc691d1a7b822f34d4b99 -F test/fuzzdata8.db 267bc89b51f4f0fca01f80ff432ff9b26e65131e806c5ca20119dfc63dd47a90 +F test/fuzzdata8.db b7f93d26fb1d29af7c5181eda877f1a20bdbb3d286bc14622e77d08752b6da61 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1804,7 +1804,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 aa61435a4c3800f023788081c1342ad6a05a41449a424fa6c039d5ca46072256 -R 17aed5b419bf8f1e5cfa29ef4f74b9e7 +P 0cfb888723fb8ff0763bbc23acb7d21a53f6d1c40661d8468248644281b29d85 +R 4804fb0a39426f38f5e4fc938e4a29ae U drh -Z d53e7c6537b08070a7f2249013f3162e +Z cb283c5b86f11d6cac5693b69d717c32 diff --git a/manifest.uuid b/manifest.uuid index f696d7c70f..d18260ebb1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0cfb888723fb8ff0763bbc23acb7d21a53f6d1c40661d8468248644281b29d85 \ No newline at end of file +a6509ca3dc2602c7d0376230ee63c1bb4c4066f007e77e9ac20d8eee966e5e13 \ No newline at end of file diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index e81a9dea0a1b516ee462a804fe98ee55f59f2592..6ae5d76f4a9e4ea18af4be55f09953fec3f0e3f3 100644 GIT binary patch delta 11095 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 VFI20@ea?^1ev%fNuUqdQ{69DPoPPiS delta 10628 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