]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improve handling of corrupt databases in fts5.
authordan <dan@noemail.net>
Fri, 6 Jan 2017 11:56:22 +0000 (11:56 +0000)
committerdan <dan@noemail.net>
Fri, 6 Jan 2017 11:56:22 +0000 (11:56 +0000)
FossilOrigin-Name: b07269413d2d9bcc1b08327a925bc28ac1438381

ext/fts5/fts5_index.c
manifest
manifest.uuid

index 46517e1aeb520e0da2b2af059984141fdd6531a8..750e0ca82d0ffabae7f0a13fc8a25fef6eb5ea7a 100644 (file)
@@ -2039,7 +2039,7 @@ static void fts5SegIterNext(
       else if( pLeaf->nn>pLeaf->szLeaf ){
         pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32(
             &pLeaf->p[pLeaf->szLeaf], iOff
-            );
+        );
         pIter->iLeafOffset = iOff;
         pIter->iEndofDoclist = iOff;
         bNewTerm = 1;
@@ -2073,6 +2073,7 @@ static void fts5SegIterNext(
       */
       int nSz;
       assert( p->rc==SQLITE_OK );
+      assert( pIter->iLeafOffset<=pIter->pLeaf->nn );
       fts5FastGetVarint32(pIter->pLeaf->p, pIter->iLeafOffset, nSz);
       pIter->bDel = (nSz & 0x0001);
       pIter->nPos = nSz>>1;
@@ -3067,7 +3068,7 @@ static void fts5ChunkIterate(
       break;
     }else{
       pgno++;
-      pData = fts5DataRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno));
+      pData = fts5LeafRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno));
       if( pData==0 ) break;
       pChunk = &pData->p[4];
       nChunk = MIN(nRem, pData->szLeaf - 4);
@@ -5829,7 +5830,7 @@ static void fts5IndexIntegrityCheckSegment(
     ** ignore this b-tree entry. Otherwise, load it into memory. */
     if( iIdxLeaf<pSeg->pgnoFirst ) continue;
     iRow = FTS5_SEGMENT_ROWID(pSeg->iSegid, iIdxLeaf);
-    pLeaf = fts5DataRead(p, iRow);
+    pLeaf = fts5LeafRead(p, iRow);
     if( pLeaf==0 ) break;
 
     /* Check that the leaf contains at least one term, and that it is equal
index 2882230189b842550e32346e61308ebda2da4b0b..4944340e6c70b8250fe4fe3d345651fba0255d61 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Ensure\sthat\ssqlite3_column_count()\sreturns\s0\sfor\sthe\s"set"\smode\sof\s"get/set"\nPRAGMA\sstatements\sthat\sdo\snot\sreturn\sa\svalue\sin\sthat\scase\s(e.g.\spage_size,\ncache_size,\sauto_vacuum).
-D 2017-01-05T20:01:29.130
+C Improve\shandling\sof\scorrupt\sdatabases\sin\sfts5.
+D 2017-01-06T11:56:22.119
 F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
@@ -104,7 +104,7 @@ F ext/fts5/fts5_buffer.c 4c1502d4c956cd092c89ce4480867f9d8bf325cd
 F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857
 F ext/fts5/fts5_expr.c dc2cee9f56b1818b85df59304b8104a5dfb8ab60
 F ext/fts5/fts5_hash.c 880998e596b60f078348d48732ca4ad9a90caad2
-F ext/fts5/fts5_index.c fdbe46da11e81c1817cd4cb2de25ffdb4dd83711
+F ext/fts5/fts5_index.c f67032a9a529ba52a545e6e3ab970764199c05d4
 F ext/fts5/fts5_main.c f85281445dcf8be32d18841c93a6f90fe27dbfe2
 F ext/fts5/fts5_storage.c de0ed8a06738bde433afe11e92295ceaffbc4e58
 F ext/fts5/fts5_tcl.c 4a901f00c8553740dba63511603f5527d741c26a
@@ -1543,8 +1543,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 285c5a54dd4f872ba98c5cd1bd3d61ae1360930f
-Q +2f57939a5583ae420b525c7e0f0dcda8626fe992
-R aa4d5a3078a5c1411982fc661d680b8d
+P e745da6b146db10d2073b090c6567c2953566286
+Q +609ac1c73f7c2b48a571c178a72383996a9538fe
+R 7872a773060f2107b336e5f6fe4999eb
 U dan
-Z 6963b304df1d7aaac5a659f2897cd33a
+Z cd77191a74da7749d1d94296913ae302
index eb716a29538c113c87ebaff77c16fb678dd66e3d..93b42d1b5a3f3b817c0ccd35acf87d0dc85a7516 100644 (file)
@@ -1 +1 @@
-e745da6b146db10d2073b090c6567c2953566286
\ No newline at end of file
+b07269413d2d9bcc1b08327a925bc28ac1438381
\ No newline at end of file