From: dan Date: Wed, 1 Apr 2026 17:43:22 +0000 (+0000) Subject: Fix a potential 4-byte overread in the sessions module when processing a corrupt... X-Git-Tag: major-release~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=62f315020463e5713ac4bee8cb7b8048ab565799;p=thirdparty%2Fsqlite.git Fix a potential 4-byte overread in the sessions module when processing a corrupt changeset. FossilOrigin-Name: c1c7e024c34da8eb0258ce552f3f81921280ccf0f1fea59374f381c0c7b43b74 --- diff --git a/ext/session/sessionC.test b/ext/session/sessionC.test index 1997ba5e80..57a05bd454 100644 --- a/ext/session/sessionC.test +++ b/ext/session/sessionC.test @@ -195,13 +195,27 @@ do_test 3.3 { #------------------------------------------------------------------------- # reset_db -set C [binary format c* 0x54 0x01 0x01 0x00 0x12 0x00 0x05] +set C [binary format c* {0x54 0x01 0x01 0x00 0x12 0x00 0x05}] do_test 4.0 { sqlite3changegroup grp list [catch { grp add $C } msg] $msg -} {1 SQLITE_CORRUPT} +} {0 {}} grp delete +#------------------------------------------------------------------------- +# +reset_db +set C [binary format c* {0x54 0xda 0xda 0xda 0xda 0xda}] + +do_execsql_test 4.0 { + CREATE TABLE t1(a PRIMARY KEY, b, c, d); +} + +breakpoint +do_test 4.1 { + list [catch { sqlite3changeset_apply db $C noop xFilter } msg] $msg +} {1 SQLITE_CORRUPT} + finish_test diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index 07db041cfc..7350dbb919 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -354,9 +354,9 @@ static int sessionVarintGet(const u8 *aBuf, int *piVal){ ** Return the number of bytes read. */ static int sessionVarintGetSafe(const u8 *aBuf, int nBuf, int *piVal){ - u8 aCopy[5]; + u8 aCopy[9]; const u8 *aRead = aBuf; - if( nBuf<5 ){ + if( nBuf