]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In the (completely unused, as far as I know) btreeinfo.c extension (not
authordrh <>
Wed, 31 Dec 2025 19:45:45 +0000 (19:45 +0000)
committerdrh <>
Wed, 31 Dec 2025 19:45:45 +0000 (19:45 +0000)
a part of any standard build) do a better job of detecting corrupt database
files and provide better error messages when corruption is detected.
[forum:/forumpost/e66a458339|Forum post e66a458339].

FossilOrigin-Name: 326d29ac7ecd933d6fca80d3d538783ed46939e7bc6e3aa60ded4b619aa73730

ext/misc/btreeinfo.c
manifest
manifest.uuid

index 9c726f5f175edef3a837441ca082f58eb5c040c6..24645f2268f489b0be738d4dbf94980aaa2d4886 100644 (file)
@@ -306,6 +306,10 @@ static int binfoCompute(sqlite3 *db, int pgno, BinfoCursor *pCsr){
     nEntry *= (nCell+1);
     if( aData[0]==10 || aData[0]==13 ) break;
     nPage *= (nCell+1);
+    if( 14+2*(nCell/2)>=pgsz ){
+      rc = SQLITE_CORRUPT;
+      break;
+    }
     if( nCell<=1 ){
       pgno = get_uint32(aData+8);
     }else{
@@ -339,7 +343,7 @@ static int binfoColumn(
     sqlite3 *db = sqlite3_context_db_handle(ctx);
     int rc = binfoCompute(db, pgno, pCsr);
     if( rc ){
-      pCursor->pVtab->zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(db));
+      pCursor->pVtab->zErrMsg = sqlite3_mprintf("%s", sqlite3_errstr(rc));
       return SQLITE_ERROR;
     }
   }
index c33f36e016c0d95cebba0109294e2ddad57af8dd..bf79b47d643d8a0aa698c5ac9b5e0f92bfbbe94a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Use\s64-bit\sintegers\sto\strack\smemory\sallocation\ssizes\sin\sthe\sCSV\sextension.\n[forum:/forumpost/e66a458339|Forum\spost\se66a458339].
-D 2025-12-31T18:30:45.051
+C In\sthe\s(completely\sunused,\sas\sfar\sas\sI\sknow)\sbtreeinfo.c\sextension\s(not\na\spart\sof\sany\sstandard\sbuild)\sdo\sa\sbetter\sjob\sof\sdetecting\scorrupt\sdatabase\nfiles\sand\sprovide\sbetter\serror\smessages\swhen\scorruption\sis\sdetected.\n[forum:/forumpost/e66a458339|Forum\spost\se66a458339].
+D 2025-12-31T19:45:45.497
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -362,7 +362,7 @@ F ext/misc/base64.c 8dc0a08cee11722822858a62625f1b63e5d5f1adac1cf4492d5732b571e3
 F ext/misc/base85.c ff54cc676c6ec86231f75ecc86ea45416fcb69751dfb79690d5f5da5f7d39867
 F ext/misc/basexx.c 89ad6b76558efbceb627afd5e2ef1d84b2e96d9aaf9b7ecb20e3d00b51be6fcf
 F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0edb2a
-F ext/misc/btreeinfo.c 8f5e6da2c82ec2f06ee0216e922370a436dafdbb06ffa7a552203515ff9e7ddf
+F ext/misc/btreeinfo.c 13bc9e9f1c13cde370d0e4a6a2683e9f1926a4cead7fb72c71871b11a06d78a1
 F ext/misc/cksumvfs.c 9d7d0cf1a8893ac5d48922bfe9f3f217b4a61a6265f559263a02bb2001259913
 F ext/misc/closure.c 5559daf1daf742228431db929d1aa86dd535a4224cc634a81d2fd0d1e6ad7839
 F ext/misc/completion.c c27b64fdd0943c1b7f152376599814cee2641f7d67a7bb9bd2b957c2a64a5591
@@ -2189,8 +2189,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 9b668d56bf0eca3eb826df3edd6705cc809d920494c192a9949cafda791d83f9
-R 394695039b751bd4516d9d6a39bd496c
+P f293a2b3ffcfe20fcda954bd31e88bbfcba18d007e9b5f29a473983f6030f2ce
+R 6777b763283545ff149c8b38934528b7
 U drh
-Z 319840f0b9cbd492657d765e7ddc32c3
+Z 99d22b051960334dbc97679fe5c74860
 # Remove this line to create a well-formed Fossil manifest.
index 16d16b01ff7045ad4576a443abf39e56a27179a3..d1d6cdb98f132bebc36fdd03838234769ddced10 100644 (file)
@@ -1 +1 @@
-f293a2b3ffcfe20fcda954bd31e88bbfcba18d007e9b5f29a473983f6030f2ce
+326d29ac7ecd933d6fca80d3d538783ed46939e7bc6e3aa60ded4b619aa73730