From a1085f06402378a4a46b0ffe63efc219e9471806 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 11 Jul 2020 16:42:28 +0000 Subject: [PATCH] Improved detection of a corrupt database schema. Fix for a problem discovered by dbsqlfuzz. FossilOrigin-Name: 30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 6 +++++- test/fuzzdata8.db | Bin 1523712 -> 1526784 bytes 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index f6a1015369..207e47c191 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Remove\sunnecessary\scode\sfrom\sthe\swindow\sfunctions\simplementation. -D 2020-07-10T21:43:53.474 +C Improved\sdetection\sof\sa\scorrupt\sdatabase\sschema.\sFix\sfor\sa\sproblem\sdiscovered\nby\sdbsqlfuzz. +D 2020-07-11T16:42:28.397 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -13,7 +13,7 @@ F ext/lsm1/lsm_unix.c 11e0a5c19d754a4e1d93dfad06de8cc201f10f886b8e61a4c599ed34e3 F ext/misc/decimal.c c1897f624893d1c12e3c879d97ca7d1c4a36cae10d32afe632779de78c4aaa4f F ext/misc/ieee754.c bb6bd8e9eeeda5a7ac82839fcab5c0b8156b0532165387cc5458a97f60047b5d F main.mk b1cd0bc6aedad7ebb667b7f74f835f932f60ee33be2a5c3051fd93eb465f5c75 -F src/btree.c e8e4a7e4727f0ead6433fdafeff347bf078fec39bee55a24441c3481e5b85164 +F src/btree.c e8a64df5ebd1e9d5184ff89fc110e048cdf7b77cc300eb51c48969ef4e71c23b F src/btreeInt.h 19267385aa3bc00067d48e0e4ba83ae82dc08b0c15a3b3df20ea653cb462b5bf F src/build.c ba1bbe563a3dc02d5fed20537603181e5289c13ea30ae5e775f552e7557adbfa F src/expr.c 73bd71448acb4f9a69c8c05e30281a9e982bb7de8f91a9c93b742dec09280442 @@ -36,7 +36,7 @@ F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19 F test/filter1.test 6c483ecf7886c8843a8612c021aa23f33c581f584151f251842b3a3592c95ac8 F test/fkey5.test 321fd41e8754389526b2b8e8769348dc9ff23a65d4d48b19c27df17459e82ec5 F test/fts3corrupt4.test b77dcdfa207c11d7966e71837c518cb0639c78fd109dec89c65d45a3bfd36701 -F test/fuzzdata8.db 0ae860b36b79fd41cafddc9e6602358b2d5c331cf200283221e659f86e196c0c +F test/fuzzdata8.db ef83ab1c8d130daabef304cb440bae2215208120de741b8476de66e16237808d F test/gencol1.test b05e6c5edb9b10d48efb634ed07342441bddc89d225043e17095c36e567521a0 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e F test/speedtest1.c a8b5afe72d78ff365012aba48d3f0c579e957facb7630f765f58a6ae4656d20d @@ -47,7 +47,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 5124732370fd53c93314c9c79b4251bd46ce81c2e7aa4f59e2c1889cc4263d5a -R ea3bc4c92fd2088a0776485a898bb94e +P 1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc +R ff70a39063eed43e9dd438f7258ce866 U drh -Z 8fbb30c3fa3021d385b71d6a00620564 +Z d54b70f0c5aff12e31d9bd93382c262a diff --git a/manifest.uuid b/manifest.uuid index 739a48e326..b8d5fa2b63 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1e87da9c93309d1d69b1e0ab65c615b9ff9c1c6813ad0c7b90d2495be4ba0adc \ No newline at end of file +30735432bc33cb953b6d7d2a2de9eb378f9740e0e663f50c727c3f138cd43a2b \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 00915abec5..76069a33eb 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8772,7 +8772,11 @@ int sqlite3BtreeInsert( assert( pPage->intKey || pX->nKey>=0 ); assert( pPage->leaf || !pPage->intKey ); if( pPage->nFree<0 ){ - rc = btreeComputeFreeSpace(pPage); + if( pCur->eState>CURSOR_INVALID ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = btreeComputeFreeSpace(pPage); + } if( rc ) return rc; } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 77e2b9fa15a0bef2a790961f44f27ae4e126cf86..d45392ac7cee5a946f03d6ece6bfa3721c8a3997 100644 GIT binary patch delta 14991 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 delta 14785 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 -- 2.47.3