From: danielk1977 Date: Thu, 12 Mar 2009 15:43:47 +0000 (+0000) Subject: Avoid fts3 crash on (MATCH '""') expressions. Ticket #3717. (CVS 6343) X-Git-Tag: version-3.6.15~407 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fe5cb1809e74d9a22270a53444991a674951366;p=thirdparty%2Fsqlite.git Avoid fts3 crash on (MATCH '""') expressions. Ticket #3717. (CVS 6343) FossilOrigin-Name: 03679857a320517a7b89e5214e948bce9af896a9 --- diff --git a/ext/fts3/fts3_expr.c b/ext/fts3/fts3_expr.c index a8475bda7c..ae11e2d2e0 100644 --- a/ext/fts3/fts3_expr.c +++ b/ext/fts3/fts3_expr.c @@ -212,8 +212,6 @@ static int getNextString( if( ii==0 ){ memset(p, 0, nByte); p->pPhrase = (Fts3Phrase *)&p[1]; - p->eType = FTSQUERY_PHRASE; - p->pPhrase->iColumn = pParse->iDefaultCol; } p->pPhrase = (Fts3Phrase *)&p[1]; p->pPhrase->nToken = ii+1; @@ -237,19 +235,25 @@ static int getNextString( char *zNew; int nNew = 0; int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase); - nByte += (p->pPhrase->nToken-1) * sizeof(struct PhraseToken); + nByte += (p?(p->pPhrase->nToken-1):0) * sizeof(struct PhraseToken); p = fts3ReallocOrFree(p, nByte + nTemp); if( !p ){ goto no_mem; } + if( zTemp ){ + zNew = &(((char *)p)[nByte]); + memcpy(zNew, zTemp, nTemp); + }else{ + memset(p, 0, nByte+nTemp); + } p->pPhrase = (Fts3Phrase *)&p[1]; - zNew = &(((char *)p)[nByte]); - memcpy(zNew, zTemp, nTemp); for(jj=0; jjpPhrase->nToken; jj++){ p->pPhrase->aToken[jj].z = &zNew[nNew]; nNew += p->pPhrase->aToken[jj].n; } sqlite3_free(zTemp); + p->eType = FTSQUERY_PHRASE; + p->pPhrase->iColumn = pParse->iDefaultCol; rc = SQLITE_OK; } diff --git a/manifest b/manifest index 74d28a8762..eb3f0fbafd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\scalls\sto\ssqlite3BtreeRollbackStmt()\sno-ops\swhen\spassed\sa\sBtree*\shandle\sthat\sdoes\snot\shave\san\sopen\sstatement\stransaction.\sTicket\s#3718.\s(CVS\s6342) -D 2009-03-12T14:43:28 +C Avoid\sfts3\scrash\son\s(MATCH\s'""')\sexpressions.\sTicket\s#3717.\s(CVS\s6343) +D 2009-03-12T15:43:48 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in d64baddbf55cdf33ff030e14da837324711a4ef7 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -55,7 +55,7 @@ F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d F ext/fts3/fts3.c 35bfa67d9cd659b799b8498895fe60b1e8bd3500 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe -F ext/fts3/fts3_expr.c a27333da8a68cf06efa2e5937a285ac9d6c9b3de +F ext/fts3/fts3_expr.c 212548eb2dc50f8640fd0d6afb56d1c2aca59a73 F ext/fts3/fts3_expr.h b5412dcf565c6d90d6a8c22090ceb9ed8c745634 F ext/fts3/fts3_hash.c e15e84d18f8df149ab290029872d4559c4c7c15a F ext/fts3/fts3_hash.h 004b759e1602ff16dfa02fea3ca1c77336ad6798 @@ -375,7 +375,7 @@ F test/fts3b.test b3a25180a633873d37d86e1ccd00ed690d37237a F test/fts3c.test 4c7ef29b37aca3e8ebb6a39b57910caa6506034e F test/fts3d.test d92a47fe8ed59c9e53d2d8e6d2685bb380aadadc F test/fts3e.test 1f6c6ac9cc8b772ca256e6b22aaeed50c9350851 -F test/fts3expr.test 000f05df771e203187ceac49ad21c303c720b783 +F test/fts3expr.test 9764961c3f4ac818dacda01ed35d8bfcef42338b F test/fts3expr2.test 8501de895a4c0631e7226c9bac055cd49c9f6646 F test/fts3near.test dc196dd17b4606f440c580d45b3d23aa975fd077 F test/func.test 70ea3d5b10d40cbc87a19b0819d2842dbcdb31f2 @@ -704,7 +704,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P 823fe7f5551e121e211d1ede606a7ce7487ffe0d -R 0a620faaa60e0f8f26633feb77199541 +P a1bb1aef0e06140a2d5d5e4b6c10c73ce95c89e0 +R b0f8f59bd683635e1f1ff253bc6bb4fd U danielk1977 -Z e6301158e9a3d6dc90886b4a779a1ded +Z eb05c44f6033ac0e625135603ee12138 diff --git a/manifest.uuid b/manifest.uuid index e9b0ea00fa..88a636bc30 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a1bb1aef0e06140a2d5d5e4b6c10c73ce95c89e0 \ No newline at end of file +03679857a320517a7b89e5214e948bce9af896a9 \ No newline at end of file diff --git a/test/fts3expr.test b/test/fts3expr.test index 3b6fef8a15..77caaea392 100644 --- a/test/fts3expr.test +++ b/test/fts3expr.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is testing the FTS3 module. # -# $Id: fts3expr.test,v 1.6 2009/01/01 14:06:13 danielk1977 Exp $ +# $Id: fts3expr.test,v 1.7 2009/03/12 15:43:48 danielk1977 Exp $ # set testdir [file dirname $argv0] @@ -468,5 +468,13 @@ foreach {id expr res} { } $res } +do_test fts3expr-7.1 { + execsql { + CREATE VIRTUAL TABLE test USING fts3 (keyword); + INSERT INTO test VALUES ('abc'); + SELECT * FROM test WHERE keyword MATCH '""'; + } +} {} + set sqlite_fts3_enable_parentheses 0 finish_test