]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Defense against a read-only WAL file that has an invalid page size. corrupt-readonly-wal
authordrh <>
Fri, 12 Jun 2026 00:13:57 +0000 (00:13 +0000)
committerdrh <>
Fri, 12 Jun 2026 00:13:57 +0000 (00:13 +0000)
FossilOrigin-Name: ce3a8f91221033d768116f65885e5ba19b97768119dca6ba5c5035aeeb91c53a

manifest
manifest.tags
manifest.uuid
src/wal.c

index 363873121e693183fd0e1b03b7697b13d6f29786..bcde7f7bb41b8977a92cd14da5bcbe327b1da71f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Comment\simprovements\son\sthe\s".ar\s-x"\scommand\sof\sthe\sCLI.\s\sNo\schanges\sto\scode.
-D 2026-06-11T23:11:14.635
+C Defense\sagainst\sa\sread-only\sWAL\sfile\sthat\shas\san\sinvalid\spage\ssize.
+D 2026-06-12T00:13:57.337
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -817,7 +817,7 @@ F src/vdbetrace.c 49e689f751505839742f4a243a1a566e57d5c9eaf0d33bbaa26e2de3febf7b
 F src/vdbevtab.c fc46b9cbd759dc013f0b3724549cc0d71379183c667df3a5988f7e2f1bd485f3
 F src/vtab.c 5437ce986db2f70e639ce8a3fe68dcdfe64b0f1abb14eaebecdabd5e0766cc68
 F src/vxworks.h 9d18819c5235b49c2340a8a4d48195ec5d5afb637b152406de95a9436beeaeab
-F src/wal.c 7340d4f9bb827bd349127cac6b2cf0cb7f76b9fda645f7b9b0bf7a6e0b1e2e7c
+F src/wal.c 58c9392750be6a36b2aeae8bdc008c38da2ff7f4ea375eca7ba8c5053511e3bb
 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
 F src/where.c 33e4a6558ee69f33d6a4e7069e3a40a55959d14e5653a9a83926e70305d471f3
@@ -2209,8 +2209,11 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P dd0c161fcd1619518cd4671d64afb6afeec44c140ec176ccb8616d381a88f42f
-R 0089f7a58023190900b7f739403086ea
+P 5b939fb1a284088c4bd46adf517cf598816e2262cd77ee2d9caaab1cef2ce9a1
+R e97ebe32562f1c6e73d19ebdb4ab3da1
+T *branch * corrupt-readonly-wal
+T *sym-corrupt-readonly-wal *
+T -sym-trunk *
 U drh
-Z 13f7465d66bf893ba8348c67ac5c7171
+Z e43e6c9b3e98abd5148e8a020e83bd8b
 # Remove this line to create a well-formed Fossil manifest.
index bec971799ff1b8ee641c166c7aeb22d12c785393..aba248c13bc7d601581128f466cdc4428ae75cb8 100644 (file)
@@ -1,2 +1,2 @@
-branch trunk
-tag trunk
+branch corrupt-readonly-wal
+tag corrupt-readonly-wal
index fa530187469937447289567815f0e37f99cc7ae3..1777856b8875215e8b3a1b6e4c9bda2899f64969 100644 (file)
@@ -1 +1 @@
-5b939fb1a284088c4bd46adf517cf598816e2262cd77ee2d9caaab1cef2ce9a1
+ce3a8f91221033d768116f65885e5ba19b97768119dca6ba5c5035aeeb91c53a
index cc8ed326cbabcb90c0ab490f8ed61ec8155b4c79..6b098dc89a7d1f3f57279f813f7e0b3b9c5f537e 100644 (file)
--- a/src/wal.c
+++ b/src/wal.c
@@ -2876,8 +2876,10 @@ static int walBeginShmUnreliable(Wal *pWal, int *pChanged){
   }
 
   /* Allocate a buffer to read frames into */
-  assert( (pWal->szPage & (pWal->szPage-1))==0 );
-  assert( pWal->szPage>=512 && pWal->szPage<=65536 );
+  if( (pWal->szPage & (pWal->szPage-1))!=0 || (pWal->szPage & 0x1fe00)==0 ){
+    rc = SQLITE_CANTOPEN;
+    goto begin_unreliable_shm_out;
+  }
   szFrame = pWal->szPage + WAL_FRAME_HDRSIZE;
   aFrame = (u8 *)sqlite3_malloc64(szFrame);
   if( aFrame==0 ){