From: drh <> Date: Wed, 15 Jun 2022 14:57:04 +0000 (+0000) Subject: When running an incremental vacuum, detect growth in the size of the database X-Git-Tag: version-3.39.0~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dba3a5ab87a285b9507dd2dc1bdefd91415d5f6d;p=thirdparty%2Fsqlite.git When running an incremental vacuum, detect growth in the size of the database file (which can only occur if the file is corrupt) and fail with SQLITE_CORRUPT. FossilOrigin-Name: cd7a44124558ea6a43c89b1cba4402d7bf6a6ccb83be0eeb7dd01b56933bca73 --- diff --git a/manifest b/manifest index fbd67a553a..f2f58ab32b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s--query-invariants\soption\sto\sfuzzcheck.\s\sNo\schanges\sto\sthe\sSQLite\score. -D 2022-06-15T12:50:51.305 +C When\srunning\san\sincremental\svacuum,\sdetect\sgrowth\sin\sthe\ssize\sof\sthe\sdatabase\nfile\s(which\scan\sonly\soccur\sif\sthe\sfile\sis\scorrupt)\sand\sfail\swith\sSQLITE_CORRUPT. +D 2022-06-15T14:57:04.251 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -510,7 +510,7 @@ F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf F src/backup.c a2891172438e385fdbe97c11c9745676bec54f518d4447090af97189fd8e52d7 F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 6f12c520c386fa56b16c2db67de6227786ca811d9c8b0e83b6a8829a10cb0d38 +F src/btree.c cc49f394c156f101ff12449a21ec1478f60e1bbd287fbf5fec8c2322dc55cccd F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e F src/build.c 23f874642825d7eaaeeb7a3281b2b1a75e1d4c4dd9ae4dceddcd908266634214 @@ -1977,9 +1977,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 988a2a759f2b9da0e287e65306039b7a3e2b5aac3d31fe15cbb30d30ea6caf71 d13b4621291831ff33cc4a8d53653eaa3f59fecf2fbc5d404db17e33a914495d -R 954f4b32b5c4881e57e563fd72566597 -T +closed d13b4621291831ff33cc4a8d53653eaa3f59fecf2fbc5d404db17e33a914495d +P fef282f9fbb10967102f9676d85b8c6a3b36aff7109f1becdaeaeddef0dff4f1 +R a5fe9d41c5873f090af7d61350af7dff U drh -Z 50169eb96e3eb3e12f6092ce44911480 +Z b3c7fcb81f6ca7a7c7393e5acbb520dd # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 59bc798104..27831e289b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fef282f9fbb10967102f9676d85b8c6a3b36aff7109f1becdaeaeddef0dff4f1 \ No newline at end of file +cd7a44124558ea6a43c89b1cba4402d7bf6a6ccb83be0eeb7dd01b56933bca73 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 773e4cb926..8ed4d6cef4 100644 --- a/src/btree.c +++ b/src/btree.c @@ -3933,12 +3933,17 @@ static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){ } do { MemPage *pFreePg; + Pgno dbSize = btreePagecount(pBt); rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iNear, eMode); if( rc!=SQLITE_OK ){ releasePage(pLastPg); return rc; } releasePage(pFreePg); + if( iFreePg>dbSize ){ + releasePage(pLastPg); + return SQLITE_CORRUPT_BKPT; + } }while( bCommit && iFreePg>nFin ); assert( iFreePg