From: dan Date: Sat, 5 Dec 2009 18:03:50 +0000 (+0000) Subject: Catch an obscure case of database corruption. X-Git-Tag: version-3.7.2~745 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=89e060e4629b6e87a079aee6ea32d057995d031c;p=thirdparty%2Fsqlite.git Catch an obscure case of database corruption. FossilOrigin-Name: 0f9b17a6da42b4da667bbbc00f713effe92a66b5 --- diff --git a/manifest b/manifest index 298b9feaeb..22fd61c115 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sanother\sbug\sin\s3-way\sNEAR\squeries. -D 2009-12-05T14:29:23 +C Catch\san\sobscure\scase\sof\sdatabase\scorruption. +D 2009-12-05T18:03:51 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -108,7 +108,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 F src/backup.c 744e98359dfc79fed43e8dec911e33e108b06aae F src/bitvec.c 06ad2c36a9c3819c0b9cbffec7b15f58d5d834e0 F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff -F src/btree.c 976b4ca0b0046bf52a8447381a136df7488f9969 +F src/btree.c bc0393e5b9e3d182706315a308f84a6a4fa388dd F src/btree.h 7944a9dac59eb3e541aad45fd2747f1051e7c63d F src/btreeInt.h 54f4245decd0409ea52cf9aee422d3d761d7ac10 F src/build.c a48e74d24897100017d39ceba5de255e53ec9488 @@ -776,7 +776,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 23dc6fb5b28712d1ba18dc7ddb3f2ef3b469d611 -R bd59d2e643443e6c4d242260f4459347 +P 3bb13a06521b54194c9f3eb44e0dc42bacf016a4 +R c1a926ab37f61c0c2b02b1d3be3199ea U dan -Z 684064b55602f4b676c31d5b0005b496 +Z dce477f25b7ac265ef79fd810e61cc32 diff --git a/manifest.uuid b/manifest.uuid index 16a33ee663..fcc047ec0e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3bb13a06521b54194c9f3eb44e0dc42bacf016a4 \ No newline at end of file +0f9b17a6da42b4da667bbbc00f713effe92a66b5 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 77d36f660b..17188cda0f 100644 --- a/src/btree.c +++ b/src/btree.c @@ -5593,11 +5593,16 @@ static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){ memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell); /* Reinitialize page pTo so that the contents of the MemPage structure - ** match the new data. The initialization of pTo "cannot" fail, as the - ** data copied from pFrom is known to be valid. */ + ** match the new data. The initialization of pTo can actually fail under + ** fairly obscure circumstances, even though it is a copy of initialized + ** page pFrom. + */ pTo->isInit = 0; - TESTONLY(rc = ) btreeInitPage(pTo); - assert( rc==SQLITE_OK ); + rc = btreeInitPage(pTo); + if( rc!=SQLITE_OK ){ + *pRC = rc; + return; + } /* If this is an auto-vacuum database, update the pointer-map entries ** for any b-tree or overflow pages that pTo now contains the pointers to.