Fix a 1-byte overread in fts3 that could occur when processing corrupt records.
FossilOrigin-Name: f1dfbc4f7452154ca5190ac22e17fdabebb92833967b11f7dae21b8d3a5857bd
This commit is contained in:
parent
410fac35d7
commit
181d75ef9e
@ -3899,6 +3899,8 @@ static int fts3IncrmergePush(
|
||||
pBlk->n += sqlite3Fts3PutVarint(&pBlk->a[pBlk->n], nPrefix);
|
||||
}
|
||||
pBlk->n += sqlite3Fts3PutVarint(&pBlk->a[pBlk->n], nSuffix);
|
||||
assert( nPrefix+nSuffix<=nTerm );
|
||||
assert( nPrefix>=0 );
|
||||
memcpy(&pBlk->a[pBlk->n], &zTerm[nPrefix], nSuffix);
|
||||
pBlk->n += nSuffix;
|
||||
|
||||
@ -4021,6 +4023,7 @@ static int fts3IncrmergeAppend(
|
||||
pLeaf = &pWriter->aNodeWriter[0];
|
||||
nPrefix = fts3PrefixCompress(pLeaf->key.a, pLeaf->key.n, zTerm, nTerm);
|
||||
nSuffix = nTerm - nPrefix;
|
||||
if(nSuffix<=0 ) return FTS_CORRUPT_VTAB;
|
||||
|
||||
nSpace = sqlite3Fts3VarintLen(nPrefix);
|
||||
nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix;
|
||||
|
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C Fix\sa\sproblem\swith\sflattening\sand\swindow\sfunctions\scausing\san\s"IS\s<column>"\sto\sbe\stransformed\sto\s"IS\sTRUE"\sor\s"IS\sFALSE"\swhen\s<column>\sis\sa\sview\sor\ssub-select\sexpression\sthat\sis\sthe\sliteral\svalue\s"TRUE"\sor\s"FALSE".
|
||||
D 2022-06-02T16:26:21.885
|
||||
C Fix\sa\s1-byte\soverread\sin\sfts3\sthat\scould\soccur\swhen\sprocessing\scorrupt\srecords.
|
||||
D 2022-06-03T13:52:53.169
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -120,7 +120,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
|
||||
F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004
|
||||
F ext/fts3/fts3_unicode.c de426ff05c1c2e7bce161cf6b706638419c3a1d9c2667de9cb9dc0458c18e226
|
||||
F ext/fts3/fts3_unicode2.c 416eb7e1e81142703520d284b768ca2751d40e31fa912cae24ba74860532bf0f
|
||||
F ext/fts3/fts3_write.c 3109c1a232da86474e196cc7db754445a354409f141e08cb11c846cdb17bdf31
|
||||
F ext/fts3/fts3_write.c 85279b980f99253c296006503a13f92957ec49b716123083f021acc74545ecfc
|
||||
F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
|
||||
F ext/fts3/tool/fts3cov.sh c331d006359456cf6f8f953e37f2b9c7d568f3863f00bb5f7eb87fea4ac01b73
|
||||
F ext/fts3/tool/fts3view.c 413c346399159df81f86c4928b7c4a455caab73bfbc8cd68f950f632e5751674
|
||||
@ -1003,7 +1003,7 @@ F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd4
|
||||
F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958
|
||||
F test/fts3comp1.test a0f5b16a2df44dd0b15751787130af2183167c0c
|
||||
F test/fts3conf.test c84bbaec81281c1788aa545ac6e78a6bd6cde2bdbbce2da261690e3659f5a76b
|
||||
F test/fts3corrupt.test 43c6c89b994e90997590ece4dfa9c9325c9b61cddd7c97e158498da8b1de79f8
|
||||
F test/fts3corrupt.test 8659266079bb0ccb4b1da3105e871c6d79a646296518c09325a6b657a54eddff
|
||||
F test/fts3corrupt2.test e318f0676e5e78d5a4b702637e2bb25265954c08a1b1e4aaf93c7880bb0c67d0
|
||||
F test/fts3corrupt3.test 0d5b69a0998b4adf868cc301fc78f3d0707745f1d984ce044c205cdb764b491f
|
||||
F test/fts3corrupt4.test 799ff994b964fed7201be6b6b62c7ff2ef7bb3da6c02b9eaf0d96a5a4d9b6ca3
|
||||
@ -1975,8 +1975,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 8eb9a7dd07afc0aef0b7c67054d73e7e821138867d115407b71c985e90d44d59
|
||||
R 4c5fa259f4ddd36065005279bf0ee79e
|
||||
P 2a952c7738d94e70024e06600fee8c3a49f317f2d02774468019bd7cf9488c8b
|
||||
R d2c5ea1de948d5953025c952202b7480
|
||||
U dan
|
||||
Z 14eaf4fe1efa1d54560b85e429055931
|
||||
Z 6b712f0c41f121f184a0a0d122159660
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
@ -1 +1 @@
|
||||
2a952c7738d94e70024e06600fee8c3a49f317f2d02774468019bd7cf9488c8b
|
||||
f1dfbc4f7452154ca5190ac22e17fdabebb92833967b11f7dae21b8d3a5857bd
|
@ -193,4 +193,40 @@ do_catchsql_test 7.10 {
|
||||
SELECT matchinfo( f , 'pcx') FROM f WHERE b MATCH x'c533';
|
||||
} {1 {database disk image is malformed}}
|
||||
|
||||
reset_db
|
||||
do_execsql_test 8.1 {
|
||||
CREATE VIRTUAL TABLE f USING fts3(a);
|
||||
INSERT INTO f(f) VALUES('nodesize=24');
|
||||
BEGIN;
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789');
|
||||
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X');
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz0123456789');
|
||||
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X');
|
||||
INSERT INTO f VALUES('abcdefghijklmnopqrstuvwxyz012345678X');
|
||||
COMMIT;
|
||||
|
||||
SELECT count(*) FROM f_segments;
|
||||
} {4}
|
||||
|
||||
do_execsql_test 8.2 {
|
||||
UPDATE f_segments SET block = (
|
||||
SELECT block FROM f_segments WHERE blockid=1
|
||||
) WHERE blockid=2
|
||||
}
|
||||
|
||||
do_catchsql_test 8.3 {
|
||||
INSERT INTO f(f) VALUES('merge=2,2');
|
||||
} {1 {database disk image is malformed}}
|
||||
|
||||
finish_test
|
||||
|
Loading…
Reference in New Issue
Block a user