From: dan Date: Fri, 6 Jan 2017 11:56:22 +0000 (+0000) Subject: Improve handling of corrupt databases in fts5. X-Git-Tag: version-3.16.2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cd3aa28dd65e08586fa96b300bb04dce6945f18b;p=thirdparty%2Fsqlite.git Improve handling of corrupt databases in fts5. FossilOrigin-Name: b07269413d2d9bcc1b08327a925bc28ac1438381 --- diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 46517e1aeb..750e0ca82d 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -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( iIdxLeafpgnoFirst ) 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 diff --git a/manifest b/manifest index 2882230189..4944340e6c 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index eb716a2953..93b42d1b5a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e745da6b146db10d2073b090c6567c2953566286 \ No newline at end of file +b07269413d2d9bcc1b08327a925bc28ac1438381 \ No newline at end of file