From b57f9c675c545f726429cb63ebf869c31c982c7d Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 24 Aug 2010 12:05:18 +0000 Subject: [PATCH] Pull the incremental_vacuum bug fix ([255f1eefa373153942c67b18b]) and the R-tree segfault bug fix ([7f2f71cc9e3c39093f09231f44]) into the 3.6.23 branch. Increase the version number to 3.6.23.3. FossilOrigin-Name: bcbdecd854d8430831fbcdf17f55ba6f55ba745b --- VERSION | 2 +- ext/rtree/rtree.c | 7 +++-- manifest | 23 ++++++++-------- manifest.uuid | 2 +- src/btree.c | 4 +++ test/tkt-5e10420e8d.test | 58 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 test/tkt-5e10420e8d.test diff --git a/VERSION b/VERSION index ea05a75496..331b7763a9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.6.23.2 +3.6.23.3 diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c index 3111cc2e96..76c598e127 100644 --- a/ext/rtree/rtree.c +++ b/ext/rtree/rtree.c @@ -438,8 +438,11 @@ nodeAcquire( pRtree->iDepth = readInt16(pNode->zData); } - assert( (rc==SQLITE_OK && pNode) || (pNode==0 && rc!=SQLITE_OK) ); - nodeHashInsert(pRtree, pNode); + if( pNode!=0 ){ + nodeHashInsert(pRtree, pNode); + }else if( rc==SQLITE_OK ){ + rc = SQLITE_CORRUPT; + } return rc; } diff --git a/manifest b/manifest index 09cbf369f7..518b11a724 100644 --- a/manifest +++ b/manifest @@ -1,14 +1,14 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Cherry-pick\sthe\sSQLITE_FCNTL_SIZE_HINT\spatch\s(check-in\s[2b7e3b4a30d6a7c4a8]\nand\sbump\sthe\sversion\snumber\sto\s3.6.23.2. -D 2010-05-19T22:09:19 +C Pull\sthe\sincremental_vacuum\sbug\sfix\s([255f1eefa373153942c67b18b])\sand\sthe\nR-tree\ssegfault\sbug\sfix\s([7f2f71cc9e3c39093f09231f44])\sinto\sthe\s3.6.23\nbranch.\s\sIncrease\sthe\sversion\snumber\sto\s3.6.23.3. +D 2010-08-24T12:05:18 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.vxworks ab005d301296c40e021ccd0133ce49ca811e319f F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6 -F VERSION e074e6c926531bc0ccf713d48465eb16807d7193 +F VERSION f97759f87917ee09d6f39d6faf3909d084d366b7 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F addopcodes.awk 17dc593f791f874d2c23a0f9360850ded0286531 F art/2005osaward.gif 0d1851b2a7c1c9d0ccce545f3e14bca42d7fd248 @@ -77,7 +77,7 @@ F ext/icu/README.txt 3b130aa66e7a681136f6add198b076a2f90d1e33 F ext/icu/icu.c 850e9a36567bbcce6bd85a4b68243cad8e3c2de2 F ext/icu/sqliteicu.h 728867a802baa5a96de7495e9689a8e01715ef37 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 -F ext/rtree/rtree.c a354f6be11a91706680936fdf77b4588f0b34dbe +F ext/rtree/rtree.c 18a405b9917a53c96f5b3373ad10260a5c07e2d5 F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e F ext/rtree/rtree1.test f72885ed80a329d6bd7991043016d74b51edf2c5 F ext/rtree/rtree2.test 7b665c44d25e51b3098068d983a39902b2e2d7a1 @@ -112,7 +112,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 F src/backup.c b293534bc2df23c57668a585b17ee7faaaef0939 F src/bitvec.c 06ad2c36a9c3819c0b9cbffec7b15f58d5d834e0 F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff -F src/btree.c 0d6e44d664b1775b269ea7e6f66fdffcfc32ceb3 +F src/btree.c d66fc956658bedbf92857c2e34a0cad59e11f5a8 F src/btree.h 0e193b7e90f1d78b79c79474040e3d66a553a4fa F src/btreeInt.h 71ed5e7f009caf17b7dc304350b3cb64b5970135 F src/build.c 11100b66fb97638d2d874c1d34d8db90650bb1d7 @@ -615,6 +615,7 @@ F test/tkt-2ea2425d34.test 1cf13e6f75d149b3209a0cb32927a82d3d79fb28 F test/tkt-31338dca7e.test 5741cd48de500347a437ba1be58c8335e83c5a5e F test/tkt-3fe897352e.test 10de1a67bd5c66b238a4c96abe55531b37bb4f00 F test/tkt-4a03edc4c8.test 2865e4edbc075b954daa82f8da7cc973033ec76e +F test/tkt-5e10420e8d.test a182c11ac3fba3aa4ef939df1198beb6c9e65a01 F test/tkt-5ee23731f.test 3581260f2a71e51db94e1506ba6b0f7311d002a9 F test/tkt-78e04e52ea.test fb5430c675e708f5cbafdf3e7e5593da5145a527 F test/tkt-94c04eaadb.test be5ea61cb04dfdc047d19b5c5a9e75fa3da67a7f @@ -795,14 +796,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P a40d080ca3c5f152f3296caf48f20728f61317de -R 6b321985aaecd4ff831144c4a95fd584 +P 776679af588625f13307369770979bccae7cf03a +R 24bedc9b2a3bdc74f3b3290451084a06 U drh -Z c0f8d3e720ac9f1021b4b9695ecbd8fd +Z ee2e1590705a1be4867e9dd7da8d3d7c -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFL9GGSoxKgR168RlERAnsLAJ9mAxq1HjJvHt5vClDz1V5oM9GOTwCgiKms -ckp+G3lPReQ5n8ebpgNyR7c= -=B53W +iD8DBQFMc7WCoxKgR168RlERApr2AJ93TyDNo57zAXoEJLaLJcUi8cmWiwCdFaCC +6xOI8H0MY3NA1228N5XczpQ= +=lucK -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index f2572112b7..aab2ff44bf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -776679af588625f13307369770979bccae7cf03a \ No newline at end of file +bcbdecd854d8430831fbcdf17f55ba6f55ba745b \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index dbcdf65ec8..1182e5e974 100644 --- a/src/btree.c +++ b/src/btree.c @@ -4730,6 +4730,10 @@ static int allocateBtreePage( if( !pPrevTrunk ){ memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); }else{ + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); + if( rc!=SQLITE_OK ){ + goto end_allocate_page; + } memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); } }else{ diff --git a/test/tkt-5e10420e8d.test b/test/tkt-5e10420e8d.test new file mode 100644 index 0000000000..bb8db2108a --- /dev/null +++ b/test/tkt-5e10420e8d.test @@ -0,0 +1,58 @@ +# 2010 August 23 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +do_test tkt-5e10420e8d.1 { + db eval { + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = incremental; + + CREATE TABLE t1(x); + CREATE TABLE t2(x); + CREATE TABLE t3(x); + } +} {} + +do_test tkt-5e10420e8d.2 { + db eval { + INSERT INTO t3 VALUES(randomblob(500 + 1024*248)); + INSERT INTO t1 VALUES(randomblob(1500)); + INSERT INTO t2 VALUES(randomblob(500 + 1024*248)); + + DELETE FROM t3; + DELETE FROM t2; + DELETE FROM t1; + } +} {} + +do_test tkt-5e10420e8d.3 { + db eval { + PRAGMA incremental_vacuum(248) + } +} {} + +do_test tkt-5e10420e8d.4 { + db eval { + PRAGMA incremental_vacuum(1) + } +} {} + +db close +sqlite3 db test.db + +do_test tkt-5e10420e8d.5 { + db eval {PRAGMA integrity_check;} +} {ok} + +finish_test -- 2.47.2