]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a virtual table related assert() that can fail following a malloc failure. (CVS...
authordanielk1977 <danielk1977@noemail.net>
Wed, 24 Dec 2008 11:25:39 +0000 (11:25 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Wed, 24 Dec 2008 11:25:39 +0000 (11:25 +0000)
FossilOrigin-Name: c6fd3b8f29927c0fc634f82885f144c78f0105d9

manifest
manifest.uuid
src/where.c

index c3ed2d74fbf94af23c813819bbc5781399c094e6..5b71032ab7097a58c9600862ece497fcc69a6198 100644 (file)
--- 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
index 7a81e2eee566b0896fdd327585566655f8bd90d9..299e4f3cde174a9d431fa0dbd351fe4e971cfc34 100644 (file)
@@ -1 +1 @@
-416c9efb49ba207a9a79d06d0b13854695a8876c
\ No newline at end of file
+c6fd3b8f29927c0fc634f82885f144c78f0105d9
\ No newline at end of file
index aac9b391055f9ff996cfbdcb31d5add1c12244fe..9b317aeee8628d15ef1d35f6af66a85e77e28358 100644 (file)
@@ -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; i<pWInfo->nLevel; 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.