From 02e38b4d2116687b415c92fe1df2f33b83f77569 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 31 Dec 2025 19:45:45 +0000 Subject: [PATCH] In the (completely unused, as far as I know) btreeinfo.c extension (not 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 | 6 +++++- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ext/misc/btreeinfo.c b/ext/misc/btreeinfo.c index 9c726f5f17..24645f2268 100644 --- a/ext/misc/btreeinfo.c +++ b/ext/misc/btreeinfo.c @@ -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; } } diff --git a/manifest b/manifest index c33f36e016..bf79b47d64 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index 16d16b01ff..d1d6cdb98f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f293a2b3ffcfe20fcda954bd31e88bbfcba18d007e9b5f29a473983f6030f2ce +326d29ac7ecd933d6fca80d3d538783ed46939e7bc6e3aa60ded4b619aa73730 -- 2.47.3