Avoid a division-by-zero error in fts5 caused by a corrupt database.
FossilOrigin-Name: 928e622178bd004be52b2271ac554176aebe9d6e115ecac4e7072eccbb4262b5
This commit is contained in:
parent
b8852ae083
commit
27a037354c
@ -586,6 +586,7 @@ static int fts5Bm25GetData(
|
||||
|
||||
/* Calculate the average document length for this FTS5 table */
|
||||
if( rc==SQLITE_OK ) rc = pApi->xRowCount(pFts, &nRow);
|
||||
assert( rc!=SQLITE_OK || nRow>0 );
|
||||
if( rc==SQLITE_OK ) rc = pApi->xColumnTotalSize(pFts, -1, &nToken);
|
||||
if( rc==SQLITE_OK ) p->avgdl = (double)nToken / (double)nRow;
|
||||
|
||||
|
@ -1078,7 +1078,13 @@ int sqlite3Fts5StorageSize(Fts5Storage *p, int iCol, i64 *pnToken){
|
||||
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;
|
||||
}
|
||||
|
@ -4652,6 +4652,34 @@ do_execsql_test 37.1 {
|
||||
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
|
||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
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
|
||||
@ -110,14 +110,14 @@ F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a0
|
||||
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
|
||||
@ -156,7 +156,7 @@ F ext/fts5/test/fts5connect.test 08030168fc96fc278fa81f28654fb7e90566f33aff269c0
|
||||
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
|
||||
@ -1800,7 +1800,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 908ff7fffa302255a74e2334ca3a1779ed43acb0268fce5a83a56fd16794dc88
|
||||
R 971a974acc09c728c7f8cfea14ce9be5
|
||||
P 7cd56cad5efead5097e9918c87313bb46e583fe62bae0df1be60e10117e2c3cb
|
||||
R ce6dd7c281d4e63f810428007f9405ad
|
||||
U dan
|
||||
Z dcdc09de7eecf89af5550e10c8853994
|
||||
Z f7b3453d78000e6a39688d7713d9192b
|
||||
|
@ -1 +1 @@
|
||||
7cd56cad5efead5097e9918c87313bb46e583fe62bae0df1be60e10117e2c3cb
|
||||
928e622178bd004be52b2271ac554176aebe9d6e115ecac4e7072eccbb4262b5
|
Loading…
x
Reference in New Issue
Block a user