From 0a8b6a9f8f5a1b446cb4217efa37529bcc37bc1d Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 16 Dec 2020 21:09:45 +0000 Subject: [PATCH] Enhance the sqlite3BtreeTransferRow() routine so that it does more careful checks for corrupt database pages. FossilOrigin-Name: 85952e71175dae73c4e587a3b80783825d91fe8567a819e072da651c1ff4131b --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 6 ++++++ test/fuzzdata8.db | Bin 1616896 -> 1619968 bytes 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 89395f093a..efa169e37a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sunnecessary\sand\sincorrect\s#ifdef.\s\sFix\sharmless\scompiler\swarnings. -D 2020-12-16T14:20:45.731 +C Enhance\sthe\ssqlite3BtreeTransferRow()\sroutine\sso\sthat\sit\sdoes\smore\scareful\nchecks\sfor\scorrupt\sdatabase\spages. +D 2020-12-16T21:09:45.084 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -481,7 +481,7 @@ F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06 F src/backup.c 3014889fa06e20e6adfa0d07b60097eec1f6e5b06671625f476a714d2356513d F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c fae82794638b41f4fdd0e49d5196ceaa7848e6666dbbf412eb173c58c4fbf48c +F src/btree.c 0f9cb686871ae668817673f0823b55d1bcadbc86ea28bd22c590b064a8322d5a F src/btree.h 285f8377aa1353185a32bf455faafa9ff9a0d40d074d60509534d14990c7829e F src/btreeInt.h 7614cae30f95b6aed0c7cac7718276a55cfe2c77058cbfd8bef5b75329757331 F src/build.c f6449d4e85e998e14d3f537e8ea898dca2fcb83c277db3e60945af9b9177db81 @@ -1043,7 +1043,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2 -F test/fuzzdata8.db f8451a1fd38efbea8c1a7cdf5d02259c4702446a9fabf566becd306b64a50236 +F test/fuzzdata8.db 7f6c5443d67ba040f760b4d28da54cc9f68174fa212ae34ccb86c645de761ec4 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1891,7 +1891,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 48301edc90fe5811df0394b106edce7726d0ea86ac562c9f4db511b812a76433 -R bc270d52af99cca590351162eea6886b +P 31cd1bbfa5b06723288d99d1cb423f88353bdef770b82e9103f71a796d66f660 +R be1e2d0f672e56f934d1c99d7dc679ec U drh -Z 53bb33e2ab1210ebb52c38429ca9bfe7 +Z e48ee7782ade3dd763b30b3828175795 diff --git a/manifest.uuid b/manifest.uuid index 1abcf7fc42..d23f02d0c0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -31cd1bbfa5b06723288d99d1cb423f88353bdef770b82e9103f71a796d66f660 \ No newline at end of file +85952e71175dae73c4e587a3b80783825d91fe8567a819e072da651c1ff4131b \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 9b8005037e..a587332ce2 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8973,6 +8973,9 @@ int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){ if( pDest->pKeyInfo==0 ) aOut += putVarint(aOut, iKey); nIn = pSrc->info.nLocal; aIn = pSrc->info.pPayload; + if( aIn+nIn>pSrc->pPage->aDataEnd ){ + return SQLITE_CORRUPT_BKPT; + } nRem = pSrc->info.nPayload; if( nIn==nRem && nInpPage->maxLocal ){ memcpy(aOut, aIn, nIn); @@ -8993,6 +8996,9 @@ int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){ } if( nRem>nIn ){ + if( aIn+nIn+4>pSrc->pPage->aDataEnd ){ + return SQLITE_CORRUPT_BKPT; + } ovflIn = get4byte(&pSrc->info.pPayload[nIn]); } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 39191fc8b1f03935f6b661eab5af1e2e2fba7285..47d0d5a165f0d64501d44be2fe3902b232d67776 100644 GIT binary patch delta 25797 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%0DT7(x7Is&;!VD-Q&luZoNOy*f3*4~6S&E^Pf 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 delta 23001 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�Cap`ZHD)}Ho5|z-l;~D2B2~LA6R3aA7m#t>=tT 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