From: drh Date: Thu, 3 May 2018 16:56:06 +0000 (+0000) Subject: Fix various error handling conditions on the cell overwrite optimization. X-Git-Tag: version-3.24.0~61^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5aa9262a68b04ec0874cd6659dff85e023f30dc;p=thirdparty%2Fsqlite.git Fix various error handling conditions on the cell overwrite optimization. Fix a test case so that it works with the new optimization. FossilOrigin-Name: f89b54f41405ed7e28132f66b8a0c690a087c2412c8f55790c2beabb0b521645 --- diff --git a/manifest b/manifest index fb7c6552f6..481534c358 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\sBtCursor.info\sfields\sare\sonly\svalid\sif\sinfo.nSize!=0. -D 2018-05-03T14:07:18.080 +C Fix\svarious\serror\shandling\sconditions\son\sthe\scell\soverwrite\soptimization.\nFix\sa\stest\scase\sso\sthat\sit\sworks\swith\sthe\snew\soptimization. +D 2018-05-03T16:56:06.556 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439 @@ -434,7 +434,7 @@ F src/auth.c 6277d63837357549fe14e723490d6dc1a38768d71c795c5eb5c0f8a99f918f73 F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c edb3c69a73cf7c0286dbe040b0ea7069e606e54fd1ee60bbe1e63e56fba0e2b7 +F src/btree.c 8faf9ebbecb98f05d75f203fdb2421e47a60f1edef3192af8fc7691cb979895c F src/btree.h 0866c0a08255142ea0e754aabd211c843cab32045c978a592a43152405ed0c84 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c 0c2be5839f22aa2938f217c6c6c2120d9fc96872a546a37541a8271541cb355e @@ -1131,7 +1131,7 @@ F test/oserror.test b32dc34f2363ef18532e3a0a7358e3e7e321974f F test/ossfuzz.c c4c4547e2c92ac52f10038b073a03248251a23c1c559728f63a18aeca0e79f03 F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17 F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f -F test/pager1.test f596d3bd53ce96e1d87d44d223d2ae6c8867dd782c425e5eb28b5721fa6aaa97 +F test/pager1.test a32ce299ed01ffb06e84a3af467ae1f3389786b316f40c4359f442c79144736b F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71 F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370 F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e @@ -1727,7 +1727,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 58d14afe1e1288d114ea213458b3121e0a95670887861928858b7f143c76f789 -R b073d403d1ba3bd03f4d3e8e8927a6d3 +P 54c537eead5b08104cfaf0d5b1e2706e53d6f74be2ca02e06229024fd889fc94 +R e3474d8063bbcdfd90a9f2049be513c8 U drh -Z e6a7ba3bea7a5cce16673df821a14231 +Z a88b0406803dcfd2b3d768953d03cd3c diff --git a/manifest.uuid b/manifest.uuid index 6323573dea..2ad022bdcb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -54c537eead5b08104cfaf0d5b1e2706e53d6f74be2ca02e06229024fd889fc94 \ No newline at end of file +f89b54f41405ed7e28132f66b8a0c690a087c2412c8f55790c2beabb0b521645 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 3811c59de7..9dc91fe982 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8176,7 +8176,9 @@ static int btreeOverwriteContent( if( nDatapData) + iOffset, iAmt)!=0 ){ @@ -8219,18 +8221,19 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){ rc = btreeGetPage(pBt, ovflPgno, &pPage, 0); if( rc ) return rc; if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 ){ - return SQLITE_CORRUPT_BKPT; - } - if( iOffset+ovflPageSizeaData); + rc = SQLITE_CORRUPT_BKPT; }else{ - ovflPageSize = nTotal - iOffset; + if( iOffset+ovflPageSizeaData); + }else{ + ovflPageSize = nTotal - iOffset; + } + rc = btreeOverwriteContent(pPage, pPage->aData+4, pX, + iOffset, ovflPageSize); } - rc = btreeOverwriteContent(pPage, pPage->aData+4, pX, - iOffset, ovflPageSize); + sqlite3PagerUnref(pPage->pDbPage); if( rc ) return rc; iOffset += ovflPageSize; - sqlite3PagerUnref(pPage->pDbPage); }while( iOffset 15000 } {1}