]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix an fts5 bug that could cause a crash following an OOM error or
authordan <dan@noemail.net>
Fri, 9 Dec 2016 16:12:04 +0000 (16:12 +0000)
committerdan <dan@noemail.net>
Fri, 9 Dec 2016 16:12:04 +0000 (16:12 +0000)
sqlite3_interrupt() interrupt.

FossilOrigin-Name: 0ea3ece988883874bb88e3daaa220d7fc0cf36ef

ext/fts5/fts5_expr.c
ext/fts5/test/fts5faultB.test
manifest
manifest.uuid

index 20fd32467cacac7665e107004a231d5eb8f6b08d..9dcd88a5bcf7f7d73325aaa78c21262b155ad33c 100644 (file)
@@ -1344,7 +1344,10 @@ int sqlite3Fts5ExprFirst(Fts5Expr *p, Fts5Index *pIdx, i64 iFirst, int bDesc){
 
   /* If not at EOF but the current rowid occurs earlier than iFirst in
   ** the iteration order, move to document iFirst or later. */
-  if( pRoot->bEof==0 && fts5RowidCmp(p, pRoot->iRowid, iFirst)<0 ){
+  if( rc==SQLITE_OK 
+   && 0==pRoot->bEof 
+   && fts5RowidCmp(p, pRoot->iRowid, iFirst)<0 
+  ){
     rc = fts5ExprNodeNext(p, pRoot, 1, iFirst);
   }
 
index 40df8b60437c1987d387cf725d841e7d8d9409d4..2ce33f4bc4207585b3d5da72b78fe92669f50c76 100644 (file)
@@ -78,6 +78,34 @@ do_faultsim_test 2.4 -faults oom* -body {
   faultsim_test_result {0 {{3 2} {2 3}}} 
 }
 
+#-------------------------------------------------------------------------
+#
+reset_db 
+do_execsql_test 3.0 {
+  CREATE VIRTUAL TABLE x1 USING fts5(z);
+}
+
+do_faultsim_test 3.1 -faults oom* -body {
+  execsql {
+    SELECT rowid FROM x1('c') WHERE rowid>1;
+  }
+} -test {
+  faultsim_test_result {0 {}}
+}
+
+do_execsql_test 3.2 {
+  INSERT INTO x1 VALUES('a b c');
+  INSERT INTO x1 VALUES('b c d');
+  INSERT INTO x1 VALUES('c d e');
+  INSERT INTO x1 VALUES('d e f');
+}
+do_faultsim_test 3.3 -faults oom* -body {
+  execsql {
+    SELECT rowid FROM x1('c') WHERE rowid>1;
+  }
+} -test {
+  faultsim_test_result {0 {2 3}}
+}
 
 finish_test
 
index 660cdf184e3fe8208933dd51a84c4dbc6218a29f..faa73d2add45741fce18d40bdfa7923ef99a42dc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Avoid\sunnecessary\szeroing\sof\sfields\sin\sthe\sMemPage\sobject\sthat\sare\sgoing\nto\sbe\sreinitialized\sbefore\suse\sanyhow.\s\sA\ssmaller\sand\sfaster\sbinary\sresults.
-D 2016-12-09T16:02:00.219
+C Fix\san\sfts5\sbug\sthat\scould\scause\sa\scrash\sfollowing\san\sOOM\serror\sor\nsqlite3_interrupt()\sinterrupt.
+D 2016-12-09T16:12:04.593
 F Makefile.in 7639c6a09da11a9c7c6f2630fc981ee588d1072d
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
@@ -102,7 +102,7 @@ F ext/fts5/fts5Int.h b2eda36e0f224365c8e23dc8f559311834f1c13f
 F ext/fts5/fts5_aux.c 67acf8d51723cf28ffc3828210ba662df4b8d267
 F ext/fts5/fts5_buffer.c 4c1502d4c956cd092c89ce4480867f9d8bf325cd
 F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857
-F ext/fts5/fts5_expr.c 34ece379a83efd047e0a0fc170e476ba76b0404a
+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_main.c f85281445dcf8be32d18841c93a6f90fe27dbfe2
@@ -159,7 +159,7 @@ F ext/fts5/test/fts5fault7.test cb14ea3c1f42394f06f2284abc58eecee6ff8080
 F ext/fts5/test/fts5fault8.test 6785af34bd1760de74e2824ea9c161965af78f85
 F ext/fts5/test/fts5fault9.test e10e395428a9ea0596ebe752ff7123d16ab78e08
 F ext/fts5/test/fts5faultA.test fa5d59c0ff62b7125cd14eee38ded1c46e15a7ea
-F ext/fts5/test/fts5faultB.test 92ae906284062bf081b6c854afa54dcb1aa9ef88
+F ext/fts5/test/fts5faultB.test 7f3bba790fa172073ac314f9b8ed197390b61eca
 F ext/fts5/test/fts5full.test 6f6143af0c6700501d9fd597189dfab1555bb741
 F ext/fts5/test/fts5fuzz1.test bece4695fc169b61ab236ada7931c6e4942cbef9
 F ext/fts5/test/fts5hash.test 06f9309ccb4d5050a131594e9e47d0b21456837d
@@ -1536,7 +1536,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 1f16c9a76bc48331799f33b30d143c632fe0e7db
-R 7472834dbbfbcc03bad94800a01d7495
-U drh
-Z 662ad8d58fb59ba8bcf6c7d7e219ef69
+P 01ada3d1068476f90dcae02cb089001ea4bcc23d
+R 6c11217a616aa1a10db37b68e7e9ff3a
+U dan
+Z 2ed0e00b28721a896fc3a4cd535080e8
index f9626ae2c12f4a6335771901d77406c1fe5ae70a..926c22f6a6c8c4063a2c4bbb6a8aa7a700ece0e8 100644 (file)
@@ -1 +1 @@
-01ada3d1068476f90dcae02cb089001ea4bcc23d
\ No newline at end of file
+0ea3ece988883874bb88e3daaa220d7fc0cf36ef
\ No newline at end of file