mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
Declare fts5 structure records corrupt if they contain a page number greater than 0x7FFFFF00.
FossilOrigin-Name: 14be580d240496f1615dad42c5442443c0629f3aff6ba8ac77485992d5e8d625
This commit is contained in:
@@ -285,7 +285,12 @@
|
||||
#define FTS5_DATA_ID_B 16 /* Max seg id number 65535 */
|
||||
#define FTS5_DATA_DLI_B 1 /* Doclist-index flag (1 bit) */
|
||||
#define FTS5_DATA_HEIGHT_B 5 /* Max dlidx tree height of 32 */
|
||||
#define FTS5_DATA_PAGE_B 31 /* Max page number of 2147483648 */
|
||||
#define FTS5_DATA_PAGE_B 31 /* 31-bit page numbers */
|
||||
|
||||
/* Maximum page number within a segment. Declare any structure read from
|
||||
** the database with a page number greater than this corrupt. It is not
|
||||
** actually possible to create a database this large. */
|
||||
#define FTS5_MAX_PGNO 0x7FFFFF00
|
||||
|
||||
#define fts5_dri(segid, dlidx, height, pgno) ( \
|
||||
((i64)(segid) << (FTS5_DATA_PAGE_B+FTS5_DATA_HEIGHT_B+FTS5_DATA_DLI_B)) + \
|
||||
@@ -1198,7 +1203,7 @@ static int fts5StructureDecode(
|
||||
i += fts5GetVarint(&pData[i], &pSeg->nEntry);
|
||||
nOriginCntr = MAX(nOriginCntr, pSeg->iOrigin2);
|
||||
}
|
||||
if( pSeg->pgnoLast<pSeg->pgnoFirst ){
|
||||
if( pSeg->pgnoLast<pSeg->pgnoFirst || pSeg->pgnoLast>FTS5_MAX_PGNO ){
|
||||
rc = FTS5_CORRUPT;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2743,5 +2743,39 @@ do_catchsql_test 4.1 {
|
||||
DELETE FROM t WHERE rowid = 1;
|
||||
} {1 {fts5: corruption in table "t"}}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
reset_db
|
||||
do_execsql_test 5.0 {
|
||||
CREATE VIRTUAL TABLE x1 USING fts5(c);
|
||||
INSERT INTO x1 VALUES('yellow brick road');
|
||||
INSERT INTO x1 VALUES('one two three');
|
||||
INSERT INTO x1 VALUES('not at this hour');
|
||||
}
|
||||
|
||||
db close
|
||||
sqlite3 db test.db
|
||||
|
||||
do_execsql_test 5.1 {
|
||||
SELECT quote(block) FROM x1_data WHERE id=10
|
||||
} {
|
||||
X'000000000103030003010101020101030101'
|
||||
}
|
||||
|
||||
do_execsql_test 5.2 {
|
||||
SELECT rowid FROM x1('two');
|
||||
} {2}
|
||||
|
||||
do_execsql_test 5.3 {
|
||||
UPDATE x1_data SET block = X'000000000103030003010187FFFFFF7F020101030101'
|
||||
}
|
||||
|
||||
db close
|
||||
sqlite3 db test.db
|
||||
|
||||
do_catchsql_test 5.4 {
|
||||
SELECT rowid FROM x1('two');
|
||||
} {1 {fts5: corrupt structure record for table "x1"}}
|
||||
|
||||
|
||||
sqlite3_fts5_may_be_corrupt 0
|
||||
finish_test
|
||||
|
||||
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
||||
C Avoid\sa\sproblem\scausing\sa\suse-after-free\sin\sthe\sfts3\ssnippet()\sfunction.
|
||||
D 2026-08-18T00:23:42.757
|
||||
C Declare\sfts5\sstructure\srecords\scorrupt\sif\sthey\scontain\sa\spage\snumber\sgreater\sthan\s0x7FFFFF00.
|
||||
D 2026-08-18T00:30:58.486
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -113,7 +113,7 @@ F ext/fts5/fts5_buffer.c dcc3f0352339fe79c9d8abbc1c2009bc3469206467880bf43558447
|
||||
F ext/fts5/fts5_config.c bfba970fe1e4eed18ee57c8d51458e226db9a960ddf775c5e50e3d76603a667e
|
||||
F ext/fts5/fts5_expr.c b906c59e9e842805cc3eea4e131b822e586bb01260e542f67920c61798dcb53d
|
||||
F ext/fts5/fts5_hash.c d5871df92ce3fa210a650cf419ee916b87c29977e86084d06612edf772bff6f5
|
||||
F ext/fts5/fts5_index.c 8653118c670d70b9c9ca8feddf843896d40a56deead9fecc5446065967754026
|
||||
F ext/fts5/fts5_index.c 4080ebf295b0d9076e49b6a1903aa26a4d5fd34f94f34c8e169e5609e855f3ca
|
||||
F ext/fts5/fts5_main.c 7819fc80808a135c3ad7bec65071a053827d1e8fe7b77ddfd734ed451c2db7a9
|
||||
F ext/fts5/fts5_storage.c 46b0024fdd8002fbfba162230e5cc212c8f019ba4075396860354bfaf549a546
|
||||
F ext/fts5/fts5_tcl.c 2be6cc14f9448f720fd4418339cd202961a0801ea9424cb3d9de946f8f5a051c
|
||||
@@ -170,7 +170,7 @@ F ext/fts5/test/fts5corrupt7.test 9664c15360e8b649ad76f457a0bbf5a7271b8eff1a8ee1
|
||||
F ext/fts5/test/fts5corrupt8.test 0b10750caf8aa23fa1c379ca4caf6130d41454505e4d5315590f4061eedcbe44
|
||||
F ext/fts5/test/fts5corrupt9.test 4253b9b59f33effac8b67da72ec34309c738aca2d5e8e2656bfbbd6a489a1dfe
|
||||
F ext/fts5/test/fts5corruptA.test 50b48f15548a3466dbd17000956ee86c2eb7d18d5a649bc11126ec917113b807
|
||||
F ext/fts5/test/fts5corruptB.test 3bd904aeeb7e69c290e1c0d045c7e97505d79b782f12578f2b351c021a31c55b
|
||||
F ext/fts5/test/fts5corruptB.test 6625ad7c6a77b5e036939231331a0ed79cb2d20e94ea99b1611dc3ad8d04a3be
|
||||
F ext/fts5/test/fts5corruptbig.test 9f95b40fa36e292feceab02b2ef06e21878bfa1ac7afefa138aae05518b51774
|
||||
F ext/fts5/test/fts5delete.test 2a5008f8b1174ef41d1974e606928c20e4f9da77d9f8347aed818994d89cced4
|
||||
F ext/fts5/test/fts5detail.test 54015e9c43ec4ba542cfb93268abdf280e0300f350efd08ee411284b03595cc4
|
||||
@@ -2206,9 +2206,9 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
|
||||
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
|
||||
P f7371f41f96f5b94d037c073863fe94ed8f1f7b9bb050d2d0405e162fcafa318
|
||||
Q +e4635c41536a0b3620780c3f1c872de33121370bafb608fce9fe7e3113e2ae01
|
||||
R 360c4de72a0ac88269798e9446518048
|
||||
P 9a367c177f4cf7b065e0361ef848ffb2eb4956ef94084f440bc07958ef076bf5
|
||||
Q +c97a940ceb4c21adc68123e084c8b8b688bcd309579a82951b2e160dc7bacf44
|
||||
R a42968ea2a15288b2f7cde30db8fc6c5
|
||||
U drh
|
||||
Z b6bfa6187f8f85ff6173e4c52d684804
|
||||
Z 7fb5b1b193d7fb73656011a0d4d273b3
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
9a367c177f4cf7b065e0361ef848ffb2eb4956ef94084f440bc07958ef076bf5
|
||||
14be580d240496f1615dad42c5442443c0629f3aff6ba8ac77485992d5e8d625
|
||||
|
||||
Reference in New Issue
Block a user