From 03c3a3edd261955c67c12ef817f63618b671a003 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 22 Oct 2026 11:35:33 +0000 Subject: [PATCH] Make the session rebaser more robust the face of column count mismatches. FossilOrigin-Name: 12285a3f4efdf41210fa3020127670b0d1fd8d740a5ac43db0c6641fec3e5142 --- ext/session/sqlite3session.c | 7 +++++-- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index 98888ad8e7..f23f6effdb 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -7067,8 +7067,8 @@ static void sessionAppendPartialUpdate( a2 = aChange; for(i=0; inCol; i++){ int n1 = sessionSerialLen(a1); - int n2 = sessionSerialLen(a2); - if( pIter->abPK[i] || a2[0]!=0xFF ){ + int n2 = (a2>=a2Eof) ? 0 : sessionSerialLen(a2); + if( pIter->abPK[i] || n2<=0 || a2[0]!=0xFF ){ memcpy(pOut, a1, n1); pOut += n1; }else{ @@ -7127,6 +7127,9 @@ static int sessionRebase( if( pIter->bPatchset ){ rc = SQLITE_ERROR; } + if( pTab && pTab->nCol>pIter->nCol ){ + rc = SQLITE_SCHEMA; + } /* Append a table header to the output for this new table */ sessionAppendByte(&sOut, pIter->bPatchset ? 'P' : 'T', &rc); diff --git a/manifest b/manifest index eff4936f72..ae130ddf9c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\srootpage\snumber\slower\sbounds\scheck\sin\sthe\s"recover"\sextension.\nTest\scase\sin\sTH3. -D 2026-10-22T11:19:52.755 +C Make\sthe\ssession\srebaser\smore\srobust\sthe\sface\sof\scolumn\scount\smismatches. +D 2026-10-22T11:35:33.749 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -581,7 +581,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 26f68307d1d876493d94efceb4ae62a19802cdee7fb4d0d3b0bdb96986cfcc99 +F ext/session/sqlite3session.c 83e1728515a7872db5abed84f02533fcd708349152b4ccc4233544c444020fac F ext/session/sqlite3session.h ca7c4422c1514a95056cc8d333217df6b1829d39058126b1de85d10cd62d7a9c F ext/session/test_session.c b30b1ecbb042d08f42406eb4fcfb2efef9609507e1b6b04b0a1ea4cb0a3cffe3 F ext/vec1/Makefile 791bd52e40d5b65026c63c8778dbdfc6d66083457ee50cf873d6483d98f43437 @@ -2287,8 +2287,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 31b84157965fcd3309a1420db71e0beee4ccdd88a2f44e5f9029a05cb04ae9cf -R e2bd098c8ee5f2c50c5f11b820d6ac16 +P 4a1fd244b5ca93c6cfe1e0f8e1d087d5b99482081e4b760d09909959c258e506 +R a70714e34df379b709e1b48eb59ed0ea U drh -Z c0b706dbfba9384e68a092d531551c29 +Z e7e4973ba225dd3d798fd9aa8d173542 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4f8a4b57e5..2feba99183 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4a1fd244b5ca93c6cfe1e0f8e1d087d5b99482081e4b760d09909959c258e506 +12285a3f4efdf41210fa3020127670b0d1fd8d740a5ac43db0c6641fec3e5142