From: dan Date: Thu, 1 Oct 2015 18:31:29 +0000 (+0000) Subject: Fix an fts3 bug causing NEAR queries on uncommitted data to malfunction. X-Git-Tag: version-3.9.0~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5171e911f2f90c7040f8eea2c87de5dca02432ea;p=thirdparty%2Fsqlite.git Fix an fts3 bug causing NEAR queries on uncommitted data to malfunction. FossilOrigin-Name: 6f90839e91024e2006042f5eb7f21ca5b47a9b4a --- diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index 6b7d5ef2ae..d5a408222e 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -1322,14 +1322,19 @@ static int fts3SegReaderNext( if( fts3SegReaderIsPending(pReader) ){ Fts3HashElem *pElem = *(pReader->ppNextElem); - if( pElem==0 ){ - pReader->aNode = 0; - }else{ + sqlite3_free(pReader->aNode); + pReader->aNode = 0; + if( pElem ){ + char *aCopy; PendingList *pList = (PendingList *)fts3HashData(pElem); + int nCopy = pList->nData+1; pReader->zTerm = (char *)fts3HashKey(pElem); pReader->nTerm = fts3HashKeysize(pElem); - pReader->nNode = pReader->nDoclist = pList->nData + 1; - pReader->aNode = pReader->aDoclist = pList->aData; + aCopy = (char*)sqlite3_malloc(nCopy); + if( !aCopy ) return SQLITE_NOMEM; + memcpy(aCopy, pList->aData, nCopy); + pReader->nNode = pReader->nDoclist = nCopy; + pReader->aNode = pReader->aDoclist = aCopy; pReader->ppNextElem++; assert( pReader->aNode ); } @@ -1569,12 +1574,14 @@ int sqlite3Fts3MsrOvfl( ** second argument. */ void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){ - if( pReader && !fts3SegReaderIsPending(pReader) ){ - sqlite3_free(pReader->zTerm); + if( pReader ){ + if( !fts3SegReaderIsPending(pReader) ){ + sqlite3_free(pReader->zTerm); + } if( !fts3SegReaderIsRootOnly(pReader) ){ sqlite3_free(pReader->aNode); - sqlite3_blob_close(pReader->pBlob); } + sqlite3_blob_close(pReader->pBlob); } sqlite3_free(pReader); } diff --git a/manifest b/manifest index b92913e6d5..8cd4cfd3fd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\scorrupt\sdatabase\sto\stest/fuzzdata3.db\sto\svalidate\sthe\sprevious\ncheck-in. -D 2015-09-30T14:30:19.646 +C Fix\san\sfts3\sbug\scausing\sNEAR\squeries\son\suncommitted\sdata\sto\smalfunction. +D 2015-10-01T18:31:29.602 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2143eeef6d0cc26006ae5fc4bb242a4a8b973412 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -96,7 +96,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3 F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004 F ext/fts3/fts3_unicode.c a93f5edc0aff44ef8b06d7cb55b52026541ca145 F ext/fts3/fts3_unicode2.c c3d01968d497bd7001e7dc774ba75b372738c057 -F ext/fts3/fts3_write.c 6f7233a06df17084d5cd968899053731bf953f94 +F ext/fts3/fts3_write.c f442223e4a1914dc1fc12b65af7e4f2c255fa47c F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100 F ext/fts3/tool/fts3view.c 8e53d0190a7b3443764bbd32ad47be2bd852026d @@ -1389,7 +1389,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 29f7227ff127202c53fe7c3b6558b3c101b0a7bc -R b3d2e18288eecf437c1dfdc1db967b0d -U drh -Z 07034a5cbcc5358cdbeac30192aaba95 +P e796c0efb6cf17444b53af75046daf7d8fa82f78 +R 0cafe6c8cdead8895dc88237ddef8389 +U dan +Z 654a1b4baa598b306106df1a114a779c diff --git a/manifest.uuid b/manifest.uuid index 956cc32adc..becb519cfa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e796c0efb6cf17444b53af75046daf7d8fa82f78 \ No newline at end of file +6f90839e91024e2006042f5eb7f21ca5b47a9b4a \ No newline at end of file