From: dan Date: Tue, 14 Apr 2026 20:02:49 +0000 (+0000) Subject: Handle a special case of a corrupt changeset in sqlite3changegroup_add(). X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=839433d4571382d1c4f4bfca815de1e8f03ac015;p=thirdparty%2Fsqlite.git Handle a special case of a corrupt changeset in sqlite3changegroup_add(). FossilOrigin-Name: 49b3bac482c831f503c7f90c35959e7ea731950e991baba86b2ab95987d2539b --- diff --git a/ext/session/sessionC.test b/ext/session/sessionC.test index afe9276083..79d4b6f6d8 100644 --- a/ext/session/sessionC.test +++ b/ext/session/sessionC.test @@ -259,6 +259,18 @@ foreach {tn type C2hex C3hex} { } {1 SQLITE_CORRUPT} } +#------------------------------------------------------------------------- +# +reset_db -finish_test +set CSD 5402010074000900010000000000000001030441414141 +set CSI 5402010074001200010000000000000001063258585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858 +do_test 7.0 { + sqlite3changegroup grp + grp add [db one {SELECT unhex($CSD)}] + list [catch { grp add [db one {SELECT unhex($CSI)}] } msg] $msg +} {1 SQLITE_CORRUPT} +grp delete + +finish_test diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index cb5f4c1cc0..34f117c3ad 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -638,10 +638,11 @@ static int sessionSerialLen(const u8 *a){ int n; assert( a!=0 ); e = *a; - if( e==0 || e==0xFF ) return 1; - if( e==SQLITE_NULL ) return 1; if( e==SQLITE_INTEGER || e==SQLITE_FLOAT ) return 9; - return sessionVarintGet(&a[1], &n) + 1 + n; + if( e==SQLITE_TEXT || e==SQLITE_BLOB ){ + return sessionVarintGet(&a[1], &n) + 1 + n; + } + return 1; } /* diff --git a/manifest b/manifest index a6cbb0c767..d5adb12428 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sRBU\svacuum\scommands,\sdo\sas\sSQLite\sdoes\sand\signore\sany\strailing\sSQL\sstatements\sin\sthe\ssql\scolumn\sof\sthe\ssqlite_schema\stable. -D 2026-04-14T18:08:30.170 +C Handle\sa\sspecial\scase\sof\sa\scorrupt\schangeset\sin\ssqlite3changegroup_add(). +D 2026-04-14T20:02:49.778 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -540,7 +540,7 @@ F ext/session/session8.test 326f3273abf9d5d2d7d559eee8f5994c4ea74a5d935562454605 F ext/session/session9.test 0c4a8fbe7a5031f50855f020f3408e1f07fd7859f1daa1629eadcec3422072d6 F ext/session/sessionA.test 1feeab0b8e03527f08f2f1defb442da25480138f F ext/session/sessionB.test c4fb7f8a688787111606e123a555f18ee04f65bb9f2a4bb2aa71d55ce4e6d02c -F ext/session/sessionC.test 2bd42225efdf5f5b1a20f75b672665bcd4f67e2a6d7ddf7420fe7bf523ba41f8 +F ext/session/sessionC.test de98b5e173fd86c79af0d0541534398d2ea75dc0d5d74a00103eb26151b76959 F ext/session/sessionD.test 470ff917dc849e2eb78142ade63aaabd729d773833cff0ff01bca0eda68a21ce F ext/session/sessionE.test b2010949c9d7415306f64e3c2072ddabc4b8250c98478d3c0c4d064bce83111d F ext/session/sessionF.test d37ed800881e742c208df443537bf29aa49fd56eac520d0f0c6df3e6320f3401 @@ -571,7 +571,7 @@ F ext/session/sessionrowid.test 85187c2f1b38861a5844868126f69f9ec62223a03449a98a F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795 F ext/session/sessionstat1.test 5e718d5888c0c49bbb33a7a4f816366db85f59f6a4f97544a806421b85dc2dec F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc -F ext/session/sqlite3session.c d5c91d5b07d2b8e860f2782ae23f7b44ce929280e00645418ee84a0fd14525b2 +F ext/session/sqlite3session.c b361c0092055566b713b0324234bc10e182526acbb78caf525bbd9fd5017ec8a F ext/session/sqlite3session.h 063e7bf7be2fff874456f452a224b5b3013b25682d108933b0351c93a1279b9c F ext/session/test_session.c 2a02a68b522e2f3d4a64b2a4733af54b0f3e500769aeccd5bcbdd440103db069 F ext/wasm/GNUmakefile 68c750f173106d9d63f12c1edf1256c6f4bad9894b155da5db64322f4912de4b @@ -2198,8 +2198,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 5b004348c3ec15a02dd657b3619502b6f8ba1c6f46918108b3de9534622076a0 -R 5a78f3486ec2ef3c0d457d1e4a6e8841 +P cf7dad1b105ab35cd7180efec735b7cbeaf42b8d53dfec5582b63cd121c3425c +R 79e42c0964d23da7fb15d3f84471544d U dan -Z 77a5371b12f9a0b0266c2dba35f30986 +Z 2ece5377d242a94c0e9715b6cd2eca3d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index d1b84b1daf..996f05d62a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cf7dad1b105ab35cd7180efec735b7cbeaf42b8d53dfec5582b63cd121c3425c +49b3bac482c831f503c7f90c35959e7ea731950e991baba86b2ab95987d2539b