int sqlite3Fts5StorageRowCount(Fts5Storage *p, i64 *pnRow){
int rc = fts5StorageLoadTotals(p, 0);
if( rc==SQLITE_OK ){
+ /* nTotalRow being zero does not necessarily indicate a corrupt
+ ** database - it might be that the FTS5 table really does contain zero
+ ** rows. However this function is only called from the xRowCount() API,
+ ** and there is no way for that API to be invoked if the table contains
+ ** no rows. Hence the FTS5_CORRUPT return. */
*pnRow = p->nTotalRow;
+ if( p->nTotalRow<=0 ) rc = FTS5_CORRUPT;
}
return rc;
}
SELECT rowid FROM t1('a');
} {1}
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 38.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(b, c);
+ INSERT INTO t1 VALUES('a', 'b');
+ INSERT INTO t1 VALUES('a', 'b');
+ SELECT quote(block) FROM t1_data WHERE rowid=1;
+} {X'020202'}
+
+do_execsql_test 38.1 {
+ SELECT * FROM t1('a b') ORDER BY rank;
+} {a b a b}
+
+do_execsql_test 38.2 {
+ UPDATE t1_data SET block = X'000202' WHERE rowid=1;
+}
+breakpoint
+do_catchsql_test 38.3 {
+ SELECT * FROM t1('a b') ORDER BY rank;
+} {1 {database disk image is malformed}}
+
+db close
+sqlite3 db test.db
+do_catchsql_test 38.4 {
+ SELECT * FROM t1('a b') ORDER BY rank;
+} {1 {database disk image is malformed}}
+
+
sqlite3_fts5_may_be_corrupt 0
-C Remove\sa\sbroken\sassert()\striggered\sby\sa\s"PRAGMA\smax_page_count\s=\sN"\ninvocation,\swhere\sN\sis\slarger\sthan\sthe\snumber\sof\spages\sin\sthe\sdatabase\simage,\nbut\ssmaller\sthan\sthe\snumber\sof\spages\sin\sthe\sdatabase\sfile.
-D 2019-01-19T15:27:09.978
+C Avoid\sa\sdivision-by-zero\serror\sin\sfts5\scaused\sby\sa\scorrupt\sdatabase.
+D 2019-01-19T15:55:27.886
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in 2a9d0331ab57c68173a4c2fe9046fe89c4d916a888e04dd7a2d36958c2bff777
F ext/fts5/extract_api_docs.tcl a36e54ec777172ddd3f9a88daf593b00848368e0
F ext/fts5/fts5.h 4f5d19b7973dae23de368728f06d3eb1fe9f5cca2990366b40e9379996f35e61
F ext/fts5/fts5Int.h 28a99786582ef2a49db6be8eead420ad4d16fbb6635560ded2455628686a1ba9
-F ext/fts5/fts5_aux.c 4353df5d71a8f84ae94ed9c5c9199d1594b8efc9476c4d617fbd8db8b291e3a7
+F ext/fts5/fts5_aux.c c93e943a172de7ac20547158f4eb1fc7729e6807883c71a1cc5be96fa157d69b
F ext/fts5/fts5_buffer.c 61f48c4921461dcd3b101eadf2c9e5641dbe7e6470bc60252bee2e42e70ef638
F ext/fts5/fts5_config.c eeec97cb0237991e7fa3bbae07b5cc354e3f238b661200c11228fe167c18f882
F ext/fts5/fts5_expr.c 188d1dca5a262a0708efc5deb809f1aa6ecea4158986a439d2670cfe72d10b65
F ext/fts5/fts5_hash.c d415f5ad332b051f0ade564bcf1762c4467cc49b2ba8ea5873d8744c705d8d42
F ext/fts5/fts5_index.c 53e064ad16036993ce9b2db77ba7e47f7a9a921b142091c268d5146caebd237a
F ext/fts5/fts5_main.c 4a7ebaa5a23e932289355c05fbfc0f5b99d8d087e2f4c9e7b7a723c7b8ac9f02
-F ext/fts5/fts5_storage.c 00db5029ee470172c1a79d7182808b678ee21b7ea1f63618bcb0591bf8cf7f8a
+F ext/fts5/fts5_storage.c 57e3f2b1a612961a27c944d6b8821028ec5fdb541d7e6b841785003ac3b0b43a
F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282db0d95
F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
F ext/fts5/fts5_test_tok.c f96c6e193c466711d6d7828d5f190407fe7ab897062d371426dd3036f01258e7
F ext/fts5/test/fts5content.test 688d5ac7af194ebc67495daea76a69e3cd5480122c2320e72d41241b423b4116
F ext/fts5/test/fts5corrupt.test 77ae6f41a7eba10620efb921cf7dbe218b0ef232b04519deb43581cb17a57ebe
F ext/fts5/test/fts5corrupt2.test 7453752ba12ce91690c469a6449d412561cc604b1dec994e16ab132952e7805f
-F ext/fts5/test/fts5corrupt3.test 44c0cb3cd7f5c272f299bcd900f270885148181f9148cdfe302e96b6d94b69c3
+F ext/fts5/test/fts5corrupt3.test b9ca1b79300cbc655b998188464774214bf003b7994338acb421fe8b3cff0975
F ext/fts5/test/fts5delete.test cbf87e3b8867c4d5cfcaed975c7475fd3f99d072bce2075fcedf43d1f82af775
F ext/fts5/test/fts5detail.test 31b240dbf6d44ac3507e2f8b65f29fdc12465ffd531212378c7ce1066766f54e
F ext/fts5/test/fts5determin.test 1b77879b2ae818b5b71c859e534ee334dac088b7cf3ff3bf76a2c82b1c788d11
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 908ff7fffa302255a74e2334ca3a1779ed43acb0268fce5a83a56fd16794dc88
-R 971a974acc09c728c7f8cfea14ce9be5
+P 7cd56cad5efead5097e9918c87313bb46e583fe62bae0df1be60e10117e2c3cb
+R ce6dd7c281d4e63f810428007f9405ad
U dan
-Z dcdc09de7eecf89af5550e10c8853994
+Z f7b3453d78000e6a39688d7713d9192b