]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
When using a read-only WAL/SHM, handle a corrupt page size in the WAL
authordrh <>
Fri, 12 Jun 2026 12:15:42 +0000 (12:15 +0000)
committerdrh <>
Fri, 12 Jun 2026 12:15:42 +0000 (12:15 +0000)
file correctly.
[bugs:/info/2026-06-11T22:20:03Z|Bug 2026-06-11T22:20:03Z].

FossilOrigin-Name: 09ab0a1bac4eb7de651f78cfd3027b452308da7e04c4ccd7f46c402c82fd6ca5

manifest
manifest.uuid
src/wal.c

index 155053b697435548843d6d3d9d33d3e0a4cbbc73..f6b48d23edb69032b9d7597ba9ce9b286396e587 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sthe\s--raw\soption\sto\sthe\sdbtotxt\scommand-line\stool,\sfor\sdebugging.
-D 2026-06-12T11:55:39.989
+C When\susing\sa\sread-only\sWAL/SHM,\shandle\sa\scorrupt\spage\ssize\sin\sthe\sWAL\nfile\scorrectly.\n[bugs:/info/2026-06-11T22:20:03Z|Bug\s2026-06-11T22:20:03Z].
+D 2026-06-12T12:15:42.420
 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 abfd99239725a258af4f733681b24dd7a9ee298babe389a36d29c197e2443ebf
 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
 F src/where.c 33e4a6558ee69f33d6a4e7069e3a40a55959d14e5653a9a83926e70305d471f3
@@ -2209,8 +2209,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 978d04f051c06aff798f915b0774da19a0b4f89f9daee124f7e62b12afaaced8
-R 7c66ea3537cbc011e569c781fdca49d0
+P abfecc08209c9377b6762125b2372e4eb1ab56b4d0399467c8fbe5cfc11c806e
+R dd45faf5e8de9f6c13f7a1c4e8ee2568
 U drh
-Z e22b66773a51df5d513a3cbc59192bb1
+Z e80837b9a459e4fc9090159477aa229b
 # Remove this line to create a well-formed Fossil manifest.
index fe74431c1482f96cd8ffbe50acfb7aeb25ebd7d0..3b2e2f72267bc9b25efa33034d95055a6bcfb2ec 100644 (file)
@@ -1 +1 @@
-abfecc08209c9377b6762125b2372e4eb1ab56b4d0399467c8fbe5cfc11c806e
+09ab0a1bac4eb7de651f78cfd3027b452308da7e04c4ccd7f46c402c82fd6ca5
index cc8ed326cbabcb90c0ab490f8ed61ec8155b4c79..33fa038dba32b388c0662f34102ff4b96edd0b5a 100644 (file)
--- a/src/wal.c
+++ b/src/wal.c
@@ -1023,6 +1023,12 @@ static int walDecodeFrame(
     return 0;
   }
 
+  /* Need a valid page size
+  */
+  if( !pWal->szPage ){
+    return 0;
+  }
+
   /* A frame is only valid if a checksum of the WAL header,
   ** all prior frames, the first 16 bytes of this frame-header,
   ** and the frame-data matches the checksum in the last 8
@@ -2877,7 +2883,7 @@ 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 );
+  assert( (pWal->szPage>=512 && pWal->szPage<=65536) || pWal->szPage==0 );
   szFrame = pWal->szPage + WAL_FRAME_HDRSIZE;
   aFrame = (u8 *)sqlite3_malloc64(szFrame);
   if( aFrame==0 ){