From: dan Date: Fri, 26 Jun 2020 20:41:18 +0000 (+0000) Subject: Fix a problem that could cause an infinite loop in the fts3 'merge' command. X-Git-Tag: version-3.33.0~92 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=30b5db126149763c826250ed171318f8b4d075ec;p=thirdparty%2Fsqlite.git Fix a problem that could cause an infinite loop in the fts3 'merge' command. FossilOrigin-Name: be545f85a6ef09cc6c762f7d2ab7a0b3adf5590c3fbdc9903e6b5b5cec6e823f --- diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index b9acc47dc5..b8e2bac0bb 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -341,7 +341,9 @@ static int fts3SqlStmt( ** created by merging the oldest :2 segments from absolute level :1. See ** function sqlite3Fts3Incrmerge() for details. */ /* 29 */ "SELECT 2 * total(1 + leaves_end_block - start_block) " - " FROM %Q.'%q_segdir' WHERE level = ? AND idx < ?", + " FROM (SELECT * FROM %Q.'%q_segdir' " + " WHERE level = ? ORDER BY idx ASC LIMIT ?" + " )", /* SQL_DELETE_SEGDIR_ENTRY ** Delete the %_segdir entry on absolute level :1 with index :2. */ diff --git a/manifest b/manifest index 92f2d80ac9..d98b681ad8 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,10 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C When\scomputing\sthe\sverification\shash\sin\sspeedtest1,\sdo\snot\sinclude\sthe\nvalue\sof\sfloating\spoint\sresults\s(which\scan\svery\sin\strailing\sbits\sdepending\non\splatform)\sbut\smerely\shash\sthe\sfact\sthat\sa\sfloating\spoint\svalue\swas\nreceived. -D 2020-06-26T17:56:43.524 +C Fix\sa\sproblem\sthat\scould\scause\san\sinfinite\sloop\sin\sthe\sfts3\s'merge'\scommand. +D 2020-06-26T20:41:18.958 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 +F ext/fts3/fts3_write.c 78a447d9f2610b90eb39489721d5dc547098fab3a8b06f834ad809f9832ce93d F ext/lsm1/lsm_unix.c 11e0a5c19d754a4e1d93dfad06de8cc201f10f886b8e61a4c599ed34e334fc24 F ext/misc/decimal.c c1897f624893d1c12e3c879d97ca7d1c4a36cae10d32afe632779de78c4aaa4f F ext/misc/ieee754.c bb6bd8e9eeeda5a7ac82839fcab5c0b8156b0532165387cc5458a97f60047b5d @@ -13,6 +14,7 @@ F src/expr.c a3ab84399b3415f66d2d0c25f5bcd98ef465c0c07ea1f19bf2a418b1c8fcad74 F src/shell.c.in d663152487d4bfddea0f6d21ebc2ed51575d22657a02c6828afd344bbd4651af F src/test1.c fe56c4bcaa2685ca9aa25d817a0ee9345e189aff4a5a71a3d8ba946c7776feb8 F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9 +F test/fts3corrupt4.test 21632b7d118833739715f89cf930ee8bbcfba52877e37786dc8ca375360d578c F test/fuzzdata8.db 0ae860b36b79fd41cafddc9e6602358b2d5c331cf200283221e659f86e196c0c F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e F test/speedtest1.c a8b5afe72d78ff365012aba48d3f0c579e957facb7630f765f58a6ae4656d20d @@ -21,7 +23,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P d34b8ff5f8d04a75996f6ca9d3a0563c83e8e833c1eb08ac3861431f36f7bfb1 -R 36a97fda742cd4bac3ca6f8cbc587bc2 -U drh -Z 5a87ac0a4d600052fc00b94437e0e024 +P e12225d59c63ba392db4fa8dc26700ac26b20c8b98ea5107eef0e0b5138ace87 +R 8648f88fe9cf53ead409a3c8323d8ebd +U dan +Z 776105c92ba8eb650aef6a142c51b9bd diff --git a/manifest.uuid b/manifest.uuid index 41eb0cd762..9f3f9b6c38 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e12225d59c63ba392db4fa8dc26700ac26b20c8b98ea5107eef0e0b5138ace87 \ No newline at end of file +be545f85a6ef09cc6c762f7d2ab7a0b3adf5590c3fbdc9903e6b5b5cec6e823f \ No newline at end of file diff --git a/test/fts3corrupt4.test b/test/fts3corrupt4.test index 27b4eb53b6..91895978fd 100644 --- a/test/fts3corrupt4.test +++ b/test/fts3corrupt4.test @@ -6123,4 +6123,16 @@ do_execsql_test 41.2 { SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'rtree ner "json1^enable"'; } +#------------------------------------------------------------------------- +do_execsql_test 42.1 { + CREATE VIRTUAL TABLE f USING fts3(a, b); +} +do_execsql_test 42.2 { + INSERT INTO f_segdir VALUES(0,2,1111,0,0,X'00'); + INSERT INTO f_segdir VALUES(0,3,0 ,0,0,X'00013003010200'); +} +do_execsql_test 42.3 { + INSERT INTO f(f) VALUES ('merge=107,2'); +} + finish_test