]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid fts3 crash on (MATCH '""') expressions. Ticket #3717. (CVS 6343)
authordanielk1977 <danielk1977@noemail.net>
Thu, 12 Mar 2009 15:43:47 +0000 (15:43 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Thu, 12 Mar 2009 15:43:47 +0000 (15:43 +0000)
FossilOrigin-Name: 03679857a320517a7b89e5214e948bce9af896a9

ext/fts3/fts3_expr.c
manifest
manifest.uuid
test/fts3expr.test

index a8475bda7cbe182505b3fc6f046c3ad097e6b532..ae11e2d2e015c97f7ac63a9a59251c685c60d450 100644 (file)
@@ -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; jj<p->pPhrase->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;
   }
 
index 74d28a87620e970acc4156a03ba318569341b47d..eb3f0fbafd28e2929b21da8246760d6ba68091c5 100644 (file)
--- 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
index e9b0ea00faeaf9775135e54304f2a029aa4ca8e3..88a636bc302722fea70acefb7cdc688a9d496f0c 100644 (file)
@@ -1 +1 @@
-a1bb1aef0e06140a2d5d5e4b6c10c73ce95c89e0
\ No newline at end of file
+03679857a320517a7b89e5214e948bce9af896a9
\ No newline at end of file
index 3b6fef8a15f93194f2e559e92bb369fb1e95b570..77caaea392b47cf7b2df382c034b6afe76140c72 100644 (file)
@@ -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