From 7751940d6ee088b5682f4b1b0bcdd6eaaa850e9a Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Thu, 30 Aug 2007 11:48:31 +0000 Subject: [PATCH] Fixes for failures in fuzz_malloc.test. (CVS 4334) FossilOrigin-Name: d3e502263808c1fe0487fda02f16adcbb1279183 --- manifest | 24 ++++++++++++------------ manifest.uuid | 2 +- src/printf.c | 7 +++++++ src/select.c | 7 ++++--- src/vdbe.c | 11 +++++++---- test/fuzz_malloc.test | 5 ++--- test/incrblob_err.test | 11 +---------- test/malloc4.test | 4 +--- test/malloc_common.tcl | 1 + 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/manifest b/manifest index cba549ad92..c947f9a3af 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\ssome\sproblems\sin\sasync2.test.\sNo\scode\schanges.\s(CVS\s4333) -D 2007-08-30T10:49:55 +C Fixes\sfor\sfailures\sin\sfuzz_malloc.test.\s(CVS\s4334) +D 2007-08-30T11:48:32 F Makefile.in bfcc303429a5d9dcd552d807ee016c77427418c3 F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -125,9 +125,9 @@ F src/pager.h 1ac4468049348ec72df09d138fc1d7e3a9d0d3a6 F src/parse.y 2d2ce439dc6184621fb0b86f4fc5aca7f391a590 F src/pragma.c 59a5e12ad0972ca2403503c12efb77f208c9a144 F src/prepare.c 1506fd279824b1f4bac97514966d0370101f9a6b -F src/printf.c e8cb99691b8370d0b721e2618db0ad01550e9b98 +F src/printf.c 81e5db668c211b9b8a9483197d6118b19d76fa74 F src/random.c 4a22746501bf36b0a088c66e38dde5daba6a35da -F src/select.c c8045b76f4c2ae95227de5997d1649e601181c76 +F src/select.c e5cc50e8d22b2490c4fb47f2ef08a9b43bcb52d9 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96 F src/shell.c ac29402b538515fa4697282387be9c1205e6e9eb F src/sqlite.h.in 1ef41c05bf64d580e77e6c57f8705cdf36f37be0 @@ -162,7 +162,7 @@ F src/update.c e89b980b443d44b68bfc0b1746cdb6308e049ac9 F src/utf.c 4af6259d5906b5a1bf3035cc387c4d7907bdd56e F src/util.c 3f9c0387b54f977726790f52ab92cd3d9379b367 F src/vacuum.c 38745037c63246d1b0669038257890cf89fc4578 -F src/vdbe.c 9d22f69c813e5a2a4c14c33cb89b7fd4edc0f462 +F src/vdbe.c d2f156bbb6b636e9b4a3648c38454bf472668a86 F src/vdbe.h 03a0fa17f6753a24d6cb585d7a362944a2c115aa F src/vdbeInt.h 630145b9bfaa19190ab491f52658a7db550f2247 F src/vdbeapi.c 9c2d681b75e4b90c28b9dd01a3f2e5905267f884 @@ -306,13 +306,13 @@ F test/func.test 605989453d1b42cec1d05c17aa232dc98e3e04e6 F test/fuzz.test 62fc19dd36a427777fd671b569df07166548628a F test/fuzz2.test ea38692ce2da99ad79fe0be5eb1a452c1c4d37bb F test/fuzz_common.tcl ff4bc2dfc465f6878f8e2d819620914365382731 -F test/fuzz_malloc.test 2b465a70936c326b919f5fde6eb629eaff3b7e41 +F test/fuzz_malloc.test 4a4ab73c1a15cd1f3568890afd4ef9e800388c2f F test/hook.test 7e7645fd9a033f79cce8fdff151e32715e7ec50a F test/icu.test e6bfae7f625c88fd14df6f540fe835bdfc1e4329 F test/in.test 369cb2aa1eab02296b4ec470732fe8c131260b1d F test/in2.test b1f447f4f0f67e9f83ff931e7e2e30873f9ea055 F test/incrblob.test 7f95c929b719626443a996b105d2b0ff06f47818 -F test/incrblob_err.test a25f71ad03eef61aa6b553dba5642c79b74e0e98 +F test/incrblob_err.test 0adf87296ad14cef6a23cd9283f81cc836c5a332 F test/incrvacuum.test 569347726ea5940c3359e3d8cabb3505595cb82f F test/incrvacuum2.test 82397ceb5941cbe852fd29bb33fcdf5665bc80c2 F test/incrvacuum_ioerr.test cb331403b8dea3c5bae6163861ff25037b0df56a @@ -348,7 +348,7 @@ F test/main.test e7212ce1023957c7209778cc87fa932bd79ba89a F test/malloc.test 52306f056e7359e68ed2e204f37f47a0e2020c57 F test/malloc2.test c1a74f46a3581b56df29ff46a4e1c99b41c44ad9 F test/malloc3.test 95211d9b2394252cacf836c62fd3d405c58f73bd -F test/malloc4.test 18dace2c0013aa616abb17b71ebb29095dfce12d +F test/malloc4.test 08830f5964a95f5a75218f56e7742e5dbe482e53 F test/malloc5.test 9db9205a5d444e23043368f961f92641c7770199 F test/malloc6.test 3733b9bd4e039c3239f869c40edbb88172025e2e F test/malloc7.test dd66d8f82916becf1d29b6640e4f4855485570f8 @@ -358,7 +358,7 @@ F test/mallocA.test bec59bb8c9837cea463d1e76e62d0ea5113c4292 F test/mallocB.test 56fd615f3fea97180132a89dd1dd2068852ef6a0 F test/mallocC.test 3c6385336c82c9c2249c6c28ed23f430e1d66bd3 F test/mallocD.test 03164dad24407f2a833b8215789f05a342647926 -F test/malloc_common.tcl 3c2fb94035e9085f8a687d724b6b61fdac8d961f +F test/malloc_common.tcl 7ba29166a33f82eef970935fd27edb8be581a019 F test/manydb.test 8de36b8d33aab5ef295b11d9e95310aeded31af8 F test/memdb.test a67bda4ff90a38f2b19f6c7f95aa7289e051d893 F test/memleak.test d2d2a1ff7105d32dc3fdf691458cf6cba58c7217 @@ -568,7 +568,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 41550d87c9395ab2fec5993655865e29235130a3 -R 0b029ad5b7a1a43fe250d3b514e5c065 +P d80d87c239df06ef2182bc2b78e6d4c1852d28c9 +R 6bcf9078fb1ea6dd2af8be55db3d1f19 U danielk1977 -Z a4c62edaa5b493566de4c2f9f8f2604c +Z 13201505b60e15eac914a3dde38bb1c5 diff --git a/manifest.uuid b/manifest.uuid index f3faf72349..339f634631 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d80d87c239df06ef2182bc2b78e6d4c1852d28c9 \ No newline at end of file +d3e502263808c1fe0487fda02f16adcbb1279183 \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index d59c8fd7f0..109e3ad47b 100644 --- a/src/printf.c +++ b/src/printf.c @@ -718,6 +718,7 @@ struct sgMprintf { int nTotal; /* Output size if unconstrained */ int nAlloc; /* Amount of space allocated in zText */ void *(*xRealloc)(void*,int); /* Function used to realloc memory */ + int iMallocFailed; /* True if xRealloc() has failed */ }; /* @@ -728,6 +729,7 @@ struct sgMprintf { */ static void mout(void *arg, const char *zNewText, int nNewChar){ struct sgMprintf *pM = (struct sgMprintf*)arg; + if( pM->iMallocFailed ) return; pM->nTotal += nNewChar; if( pM->zText ){ if( pM->nChar + nNewChar + 1 > pM->nAlloc ){ @@ -738,6 +740,8 @@ static void mout(void *arg, const char *zNewText, int nNewChar){ if( pM->zText==pM->zBase ){ pM->zText = pM->xRealloc(0, nAlloc); if( pM->zText==0 ){ + pM->nAlloc = 0; + pM->iMallocFailed = 0; return; }else if( pM->nChar ){ memcpy(pM->zText, pM->zBase, pM->nChar); @@ -748,8 +752,10 @@ static void mout(void *arg, const char *zNewText, int nNewChar){ if( zNew ){ pM->zText = zNew; }else{ + pM->iMallocFailed = 0; pM->xRealloc(pM->zText, 0); pM->zText = 0; + pM->nAlloc = 0; return; } } @@ -781,6 +787,7 @@ static char *base_vprintf( sM.nChar = sM.nTotal = 0; sM.nAlloc = nInitBuf; sM.xRealloc = xRealloc; + sM.iMallocFailed = 0; vxprintf(mout, &sM, useInternal, zFormat, ap); if( xRealloc ){ if( sM.zText==sM.zBase ){ diff --git a/src/select.c b/src/select.c index 8383e2be3b..40a326f19c 100644 --- a/src/select.c +++ b/src/select.c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** -** $Id: select.c,v 1.357 2007/08/29 12:31:27 danielk1977 Exp $ +** $Id: select.c,v 1.358 2007/08/30 11:48:32 danielk1977 Exp $ */ #include "sqliteInt.h" @@ -1127,12 +1127,13 @@ Table *sqlite3ResultSetOfSelect(Parse *pParse, char *zTabName, Select *pSelect){ /* If all else fails, make up a name */ zName = sqlite3MPrintf(db, "column%d", i+1); } - sqlite3Dequote(zName); - if( db->mallocFailed ){ + if( !zName || db->mallocFailed ){ + db->mallocFailed = 1; sqlite3_free(zName); sqlite3DeleteTable(pTab); return 0; } + sqlite3Dequote(zName); /* Make sure the column name is unique. If the name is not unique, ** append a integer to the name so that it becomes unique. diff --git a/src/vdbe.c b/src/vdbe.c index f01a7930ea..b92bbcad46 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.648 2007/08/30 01:19:59 drh Exp $ +** $Id: vdbe.c,v 1.649 2007/08/30 11:48:32 danielk1977 Exp $ */ #include "sqliteInt.h" #include @@ -3087,12 +3087,15 @@ case OP_Found: { /* no-push */ assert( i>=0 && inCursor ); assert( p->apCsr[i]!=0 ); if( (pC = p->apCsr[i])->pCursor!=0 ){ - int res, rx; + int res; assert( pC->isTable==0 ); assert( pTos->flags & MEM_Blob ); Stringify(pTos, encoding); - rx = sqlite3BtreeMoveto(pC->pCursor, pTos->z, pTos->n, 0, &res); - alreadyExists = rx==SQLITE_OK && res==0; + rc = sqlite3BtreeMoveto(pC->pCursor, pTos->z, pTos->n, 0, &res); + if( rc!=SQLITE_OK ){ + break; + } + alreadyExists = (res==0); pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; } diff --git a/test/fuzz_malloc.test b/test/fuzz_malloc.test index a796995254..6a54c18150 100644 --- a/test/fuzz_malloc.test +++ b/test/fuzz_malloc.test @@ -12,7 +12,7 @@ # # This file tests malloc failures in concert with fuzzy SQL generation. # -# $Id: fuzz_malloc.test,v 1.7 2007/08/29 19:15:09 drh Exp $ +# $Id: fuzz_malloc.test,v 1.8 2007/08/30 11:48:32 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -40,7 +40,7 @@ proc do_fuzzy_malloc_test {testname args} { set ::fuzzyopts(-sqlprep) {} array set ::fuzzyopts $args - sqlite3_memdebug_fail -1 -repeat 0 + sqlite3_memdebug_fail -1 db close file delete test.db test.db-journal sqlite3 db test.db @@ -85,5 +85,4 @@ do_fuzzy_malloc_test fuzzy_malloc-3 \ -template {[Select]} \ -sqlprep $::SQLPREP -sqlite3_memdebug_fail -1 finish_test diff --git a/test/incrblob_err.test b/test/incrblob_err.test index 8f92f95554..35a8a0286c 100644 --- a/test/incrblob_err.test +++ b/test/incrblob_err.test @@ -9,7 +9,7 @@ # #*********************************************************************** # -# $Id: incrblob_err.test,v 1.6 2007/08/29 12:31:29 danielk1977 Exp $ +# $Id: incrblob_err.test,v 1.7 2007/08/30 11:48:32 danielk1977 Exp $ # set testdir [file dirname $argv0] @@ -20,14 +20,6 @@ ifcapable {!incrblob || !memdebug} { return } -# Only run these tests if memory debugging is turned on. -# -if {[info command sqlite3_memdebug_fail]==""} { - puts "Skipping incrblob_err tests: not compiled with -DSQLITE_MEMDEBUG..." - finish_test - return -} - source $testdir/malloc_common.tcl set ::fd [open [info script]] @@ -79,7 +71,6 @@ do_malloc_test 3 -tclprep { error "out of memory" } } -sqlite3_memdebug_fail -1 do_ioerr_test incrblob_err-4 -cksum 1 -sqlprep { CREATE TABLE blobs(k, v BLOB); diff --git a/test/malloc4.test b/test/malloc4.test index 2adc6288bb..81d47ce01c 100644 --- a/test/malloc4.test +++ b/test/malloc4.test @@ -12,7 +12,7 @@ # This file contains tests to ensure that the library handles malloc() failures # correctly. The emphasis in this file is on sqlite3_column_XXX() APIs. # -# $Id: malloc4.test,v 1.6 2007/08/29 12:31:29 danielk1977 Exp $ +# $Id: malloc4.test,v 1.7 2007/08/30 11:48:32 danielk1977 Exp $ #--------------------------------------------------------------------------- # NOTES ON EXPECTED BEHAVIOUR @@ -76,12 +76,10 @@ proc do_stmt_test {id sql} { } {1} do_test ${testid}.2.2 { set mf1 [expr [sqlite3_memdebug_pending] < 0] -btree_breakpoint set ::name16 [sqlite3_column_name16 $::STMT 0] set ::name16 [encoding convertfrom unicode $::name16] set ::name16 [string range $::name16 0 end-1] set mf2 [expr [sqlite3_memdebug_pending] < 0] -puts [list $mf1 $mf2 $::name16] expr {$mf1 == $mf2 || $::name16 == ""} } {1} do_test ${testid}.2.3 { diff --git a/test/malloc_common.tcl b/test/malloc_common.tcl index 76194c7242..28be4c94c5 100644 --- a/test/malloc_common.tcl +++ b/test/malloc_common.tcl @@ -129,4 +129,5 @@ proc do_malloc_test {tn args} { } } unset ::mallocopts + sqlite3_memdebug_fail -1 }