]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a crash in FTS incremental phrase processing that can occur if the second or...
authordan <dan@noemail.net>
Mon, 14 Oct 2013 20:30:51 +0000 (20:30 +0000)
committerdan <dan@noemail.net>
Mon, 14 Oct 2013 20:30:51 +0000 (20:30 +0000)
FossilOrigin-Name: 0bf438fc30582a08fddfc3cec49366ee17ae2abe

ext/fts3/fts3.c
manifest
manifest.uuid
test/fts4incr.test

index a3dfae22fe8b9ffcf1143956f29d433fdb209b5d..dd6d38a59db14032cdaaa429f38020d631d450c4 100644 (file)
@@ -4331,7 +4331,7 @@ static int fts3EvalIncrPhraseNext(
       int i;                      /* Used to iterate through tokens */
 
       /* Advance the iterator for each token in the phrase once. */
-      for(i=0; rc==SQLITE_OK && i<p->nToken; i++){
+      for(i=0; rc==SQLITE_OK && i<p->nToken && bEof==0; i++){
         rc = incrPhraseTokenNext(pTab, p, i, &a[i], &bEof);
         if( a[i].bIgnore==0 && (bMaxSet==0 || DOCID_CMP(iMax, a[i].iDocid)<0) ){
           iMax = a[i].iDocid;
index 64348ab890ad2373d5a28fba41910c1f762ba707..811db3a0b0846aa9c3755d0d76ef288e67cdd0a0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\simplementations\sfor\sthe\stoInteger()\sand\stoReal()\sSQL\sfunctions.
-D 2013-10-14T19:35:33.432
+C Fix\sa\scrash\sin\sFTS\sincremental\sphrase\sprocessing\sthat\scan\soccur\sif\sthe\ssecond\sor\ssubsequent\stoken\sis\smuch\smore\scommon\sin\sthe\sdataset\sthan\sthe\sfirst.
+D 2013-10-14T20:30:51.215
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in e2d28ec95bd17ab4f3b6ee40b7102e9d7a0857b9
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -78,7 +78,7 @@ F ext/fts3/README.content fdc666a70d5257a64fee209f97cf89e0e6e32b51
 F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
 F ext/fts3/README.tokenizers e0a8b81383ea60d0334d274fadf305ea14a8c314
 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts3/fts3.c dcb90d12ff4a0ccfceaefb3bae2199b6536e0dfc
+F ext/fts3/fts3.c f25ae5729d40cc4e661c0a552685038f27e72bc9
 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
 F ext/fts3/fts3Int.h 8689f7cf85020e7f88d1e761eeac480c3b0ea7ad
 F ext/fts3/fts3_aux.c b02632f6dd0e375ce97870206d914ea6d8df5ccd
@@ -557,7 +557,7 @@ F test/fts4aa.test 0c3152322c7f0b548cc942ad763eaba0da87ccca
 F test/fts4check.test 66fa274cab2b615f2fb338b257713aba8fad88a8
 F test/fts4content.test 2e7252557d6d24afa101d9ba1de710d6140e6d06
 F test/fts4docid.test e33c383cfbdff0284685604d256f347a18fdbf01
-F test/fts4incr.test 2fae04582c2329a038b2b1f985e702478fb94888
+F test/fts4incr.test 361960ed3550e781f3f313e17e2182ef9cefc0e9
 F test/fts4langid.test 24a6e41063b416bbdf371ff6b4476fa41c194aa7
 F test/fts4merge.test c424309743fdd203f8e56a1f1cd7872cd66cc0ee
 F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891
@@ -1124,8 +1124,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P b8b5f6c8f646989bc62bb59416de9bca003a5896 a88b5be01e68b26267ff6eb05e931ef2e7fc9f99
-R fc9823e555e748e8dd749e50020ff907
-T +closed a88b5be01e68b26267ff6eb05e931ef2e7fc9f99
-U drh
-Z f917a0a33a0846e0a4d8398bd8607f59
+P a0f7cbc068416cf55b86056f2ce7ee505c6cc3ea
+R 5f9ee33bea159851b0bd3b4df54def2b
+U dan
+Z 1fee4cc09a93b480a53b5d3c883e606f
index 91226e5773eaf30ed23e760481462b3d94666c88..f84250b290b094bd0d385f84ae48744f3ca21611 100644 (file)
@@ -1 +1 @@
-a0f7cbc068416cf55b86056f2ce7ee505c6cc3ea
\ No newline at end of file
+0bf438fc30582a08fddfc3cec49366ee17ae2abe
\ No newline at end of file
index a9799b351d1b62a32d3952bf034ec8342e10b77c..17212efce7fd81ffce82ce14c95da665cf9d234a 100644 (file)
@@ -50,4 +50,26 @@ foreach {tn q res} {
   puts "with optimization: $t(0)    without: $t(1)"
 }
 
+do_test 2.1 {
+  execsql {
+    CREATE VIRTUAL TABLE t2 USING fts4(order=DESC);
+  }
+  set num [list one two three four five six seven eight nine ten]
+  execsql BEGIN
+  for {set i 0} {$i < 10000} {incr i} {
+    set x "[lindex $num [expr $i%10]] zero"
+    execsql { INSERT INTO t2(docid, content) VALUES($i, $x) }
+  }
+  execsql COMMIT
+  execsql { INSERT INTO t2(t2) VALUES('optimize') }
+} {}
+
+do_execsql_test 2.2 {
+  SELECT count(*) FROM t2 WHERE t2 MATCH '"never zero"'
+} {0}
+
+do_execsql_test 2.3 {
+  SELECT count(*) FROM t2 WHERE t2 MATCH '"two zero"'
+} {1000}
+
 finish_test