From 62f315020463e5713ac4bee8cb7b8048ab565799 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 1 Apr 2026 17:43:22 +0000 Subject: [PATCH] Fix a potential 4-byte overread in the sessions module when processing a corrupt changeset. FossilOrigin-Name: c1c7e024c34da8eb0258ce552f3f81921280ccf0f1fea59374f381c0c7b43b74 --- ext/session/sessionC.test | 18 ++++++++++++++++-- ext/session/sqlite3session.c | 4 ++-- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 27 insertions(+), 13 deletions(-) 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