From: drh <> Date: Mon, 13 Sep 2021 13:53:13 +0000 (+0000) Subject: Fix an incorrect comment and possible integer overflow in pager X-Git-Tag: version-3.37.0~247 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=57dd7e6ad87781d3e37890925b599b72f273154a;p=thirdparty%2Fsqlite.git Fix an incorrect comment and possible integer overflow in pager resulting from check-in [23ca23894af352ea]. Problem reported by [forum:/forumpost/e2ea1a3f61|forum post e2ea1a3f61]. Also change the datatype of Pager.pageSize to i64 even though page size never exceeds 65536, in order to help prevent future problems of this kind. FossilOrigin-Name: f4a552ed9f4ab35520b634954c39748cc7bda535f426280b79da1b99f70599ac --- diff --git a/manifest b/manifest index 8e2c3d6acc..4edb55e3db 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\sreplace.tcl\suseful\swith\sTCL\s8.4 -D 2021-09-10T22:00:43.203 +C Fix\san\sincorrect\scomment\sand\spossible\sinteger\soverflow\sin\spager\nresulting\sfrom\scheck-in\s[23ca23894af352ea].\s\sProblem\sreported\sby\n[forum:/forumpost/e2ea1a3f61|forum\spost\se2ea1a3f61].\s\sAlso\schange\nthe\sdatatype\sof\sPager.pageSize\sto\si64\seven\sthough\spage\ssize\snever\nexceeds\s65536,\sin\sorder\sto\shelp\sprevent\sfuture\sproblems\sof\sthis\skind. +D 2021-09-13T13:53:13.560 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -531,7 +531,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c b11e4610769922253dec27d7af4a07ff84f65169d19bda5e9b12a152a706f7f5 F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 95c255256b13827caf038c8f963d334784073f38ab6ef9d70371d9d04f3c43e0 +F src/pager.c 1d22bb9081167b2e27a64bf49c7a22ad70b50dedeb78cf22cfe8d8370afa0be5 F src/pager.h 4bf9b3213a4b2bebbced5eaa8b219cf25d4a82f385d093cd64b7e93e5285f66f F src/parse.y 86aa016b281f61d7664dd8cb7808cab8114d14cfaf362a9b9fc9ead8f33546b7 F src/pcache.c 084e638432c610f95aea72b8509f0845d2791293f39d1b82f0c0a7e089c3bb6b @@ -1922,7 +1922,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d577030cdad165474b082afbe64782e2eb3290331b0e3045b1e85ee6fe011504 -R e11d4d0cf2b693b49f8aa8017ef21f60 -U larrybr -Z c88549a8ac5b53702887ce858b5cfbe8 +P 2dd61dd97b0326b59b0bc3c83b4d4b9acf811c5acae4d1003e7525ba7a26daf5 +R 66cc359b5bd82ddca4b6f4fbb9050fa7 +U drh +Z 3e25a183a096e34ec8d9ba775c31b648 diff --git a/manifest.uuid b/manifest.uuid index 47e65984cd..98e404b1e5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2dd61dd97b0326b59b0bc3c83b4d4b9acf811c5acae4d1003e7525ba7a26daf5 \ No newline at end of file +f4a552ed9f4ab35520b634954c39748cc7bda535f426280b79da1b99f70599ac \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 12a78cde80..a72ae73ea4 100644 --- a/src/pager.c +++ b/src/pager.c @@ -679,8 +679,8 @@ struct Pager { i16 nReserve; /* Number of unused bytes at end of each page */ u32 vfsFlags; /* Flags for sqlite3_vfs.xOpen() */ u32 sectorSize; /* Assumed sector size during rollback */ - int pageSize; /* Number of bytes in a page */ Pgno mxPgno; /* Maximum allowed size of the database */ + i64 pageSize; /* Number of bytes in a page */ i64 journalSizeLimit; /* Size limit for persistent journal files */ char *zFilename; /* Name of the database file */ char *zJournal; /* Name of the journal file */ @@ -6932,14 +6932,14 @@ int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){ } pPager->nSavepoint = nNew; - /* If this is a release of the outermost savepoint, truncate - ** the sub-journal to zero bytes in size. */ + /* Truncate the sub-journal so that it only includes the parts + ** that are still in use. */ if( op==SAVEPOINT_RELEASE ){ PagerSavepoint *pRel = &pPager->aSavepoint[nNew]; if( pRel->bTruncateOnRelease && isOpen(pPager->sjfd) ){ /* Only truncate if it is an in-memory sub-journal. */ if( sqlite3JournalIsInMemory(pPager->sjfd) ){ - i64 sz = (pPager->pageSize+4)*pRel->iSubRec; + i64 sz = (pPager->pageSize+4)*(i64)pRel->iSubRec; rc = sqlite3OsTruncate(pPager->sjfd, sz); assert( rc==SQLITE_OK ); }