From: danielk1977 Date: Wed, 24 Dec 2008 11:25:39 +0000 (+0000) Subject: Fix a virtual table related assert() that can fail following a malloc failure. (CVS... X-Git-Tag: version-3.6.10~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80442947433dcd75ec92ec684103f5d4939f6ca2;p=thirdparty%2Fsqlite.git Fix a virtual table related assert() that can fail following a malloc failure. (CVS 6064) FossilOrigin-Name: c6fd3b8f29927c0fc634f82885f144c78f0105d9 --- diff --git a/manifest b/manifest index c3ed2d74fb..5b71032ab7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scouple\sof\sproblems\sin\stest\sfile\stest_journal.c\sthat\swere\scausing\ssegfaults\swhen\srunning\sall.test.\s(CVS\s6063) -D 2008-12-24T09:30:22 +C Fix\sa\svirtual\stable\srelated\sassert()\sthat\scan\sfail\sfollowing\sa\smalloc\sfailure.\s(CVS\s6064) +D 2008-12-24T11:25:40 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 77635d0909c2067cee03889a1e04ce910d8fb809 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -207,7 +207,7 @@ F src/vdbeblob.c b0dcebfafedcf9c0addc7901ad98f6f986c08935 F src/vdbemem.c f9c859ac17e2e05a0f249868ce4f191f69edd31d F src/vtab.c e39e011d7443a8d574b1b9cde207a35522e6df43 F src/walker.c 488c2660e13224ff70c0c82761118efb547f8f0d -F src/where.c ef69833cdf0e19a91ec1b305b506d100ac3f648f +F src/where.c b273a232aa6e7616bb6025a80276c8aff8df2b22 F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/alias.test 597662c5d777a122f9a3df0047ea5c5bd383a911 @@ -685,7 +685,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P 55d4f493e7df8515574a75caec9967d6c71b6012 -R cc29a042a248eb8ecfc4c3d8c12a4a30 +P 416c9efb49ba207a9a79d06d0b13854695a8876c +R 9a2fdeee38c8141c5f23656702bf84f1 U danielk1977 -Z f0704a3629730edd74463891e861aad2 +Z 50d42c2e2360bf3c9b72e4e25ad13cf2 diff --git a/manifest.uuid b/manifest.uuid index 7a81e2eee5..299e4f3cde 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -416c9efb49ba207a9a79d06d0b13854695a8876c \ No newline at end of file +c6fd3b8f29927c0fc634f82885f144c78f0105d9 \ No newline at end of file diff --git a/src/where.c b/src/where.c index aac9b39105..9b317aeee8 100644 --- a/src/where.c +++ b/src/where.c @@ -16,7 +16,7 @@ ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** -** $Id: where.c,v 1.343 2008/12/23 23:56:22 drh Exp $ +** $Id: where.c,v 1.344 2008/12/24 11:25:40 danielk1977 Exp $ */ #include "sqliteInt.h" @@ -2781,7 +2781,10 @@ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ for(i=0; inLevel; i++){ sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo; if( pInfo ){ - assert( pInfo->needToFreeIdxStr==0 ); + assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); + if( pInfo->needToFreeIdxStr ){ + sqlite3_free(pInfo->idxStr); + } sqlite3DbFree(db, pInfo); } } @@ -3093,7 +3096,9 @@ WhereInfo *sqlite3WhereBegin( } } WHERETRACE(("*** Optimizer Finished ***\n")); - if( db->mallocFailed ) goto whereBeginError; + if( db->mallocFailed ){ + goto whereBeginError; + } /* If the total query only selects a single row, then the ORDER BY ** clause is irrelevant.