diff -Naur sqlite-src-3260000/ext/fts5/fts5_index.c sqlite-src-3260000-patch/ext/fts5/fts5_index.c --- sqlite-src-3260000/ext/fts5/fts5_index.c 2018-12-01 14:38:18.000000000 +0100 +++ sqlite-src-3260000-patch/ext/fts5/fts5_index.c 2026-08-12 10:47:37.308649697 +0200 @@ -712,7 +712,7 @@ static Fts5Data *fts5LeafRead(Fts5Index *p, i64 iRowid){ Fts5Data *pRet = fts5DataRead(p, iRowid); if( pRet ){ - if( pRet->szLeaf>pRet->nn ){ + if( pRet->szLeaf<4 || pRet->szLeaf>pRet->nn ){ p->rc = FTS5_CORRUPT; fts5DataRelease(pRet); pRet = 0; diff -Naur sqlite-src-3260000/ext/fts5/test/fts5corruptA.test sqlite-src-3260000-patch/ext/fts5/test/fts5corruptA.test --- sqlite-src-3260000/ext/fts5/test/fts5corruptA.test 1970-01-01 01:00:00.000000000 +0100 +++ sqlite-src-3260000-patch/ext/fts5/test/fts5corruptA.test 2026-08-12 15:39:06.975449775 +0200 @@ -0,0 +1,55 @@ +# 2026 May 11 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +source [file join [file dirname [info script]] fts5_common.tcl] +set testprefix fts5corruptA + +# If SQLITE_ENABLE_FTS5 is not defined, omit this file. +ifcapable !fts5 { + finish_test + return +} +sqlite3_fts5_may_be_corrupt 1 + +do_execsql_test 1.0 { + CREATE VIRTUAL TABLE t USING fts5(x, detail='full'); + INSERT INTO t(t, rank) VALUES('pgsz', 32); +} + +set big [string repeat "a " 200] +do_execsql_test 1.1 { + INSERT INTO t(rowid, x) VALUES(1, $big) +} + +do_test 1.2 { + db eval { + SELECT min(rowid) AS base_rowid, count(*) AS page_count FROM t_data + WHERE rowid>1000 + } {} +} {} + +do_test 1.4 { + set hex [hexio_read test.db 0 [file size test.db]] + + set off [string first "023061018310" $hex] + set hex [string replace $hex $off [expr $off+11] 023061018370] + hexio_write test.db 0 $hex +} {6144} + +sqlite3 db test.db + +do_catchsql_test 1.5 { + SELECT rowid FROM t WHERE t MATCH 'a' +} {1 {database disk image is malformed}} + +sqlite3_fts5_may_be_corrupt 0 +finish_test