]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
The previous OOM fix was bad. Back it out and replace it with a better one.
authordrh <drh@noemail.net>
Wed, 24 Aug 2016 00:51:48 +0000 (00:51 +0000)
committerdrh <drh@noemail.net>
Wed, 24 Aug 2016 00:51:48 +0000 (00:51 +0000)
FossilOrigin-Name: 1e3bc3698a4b779e6af8e3c727929c4dbddf3edb

manifest
manifest.uuid
src/expr.c
src/wherecode.c

index ce1c2ee88cc72a300df054e084ba2d478fb19172..c7b9d98ca9698bb3c6b6e688b449ad74e03b9e44 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Avoid\sa\spotential\snull-pointer\sdereference\sfollowing\san\sOOM.
-D 2016-08-24T00:25:27.492
+C The\sprevious\sOOM\sfix\swas\sbad.\s\sBack\sit\sout\sand\sreplace\sit\swith\sa\sbetter\sone.
+D 2016-08-24T00:51:48.043
 F Makefile.in cfd8fb987cd7a6af046daa87daa146d5aad0e088
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc d66d0395c38571aab3804f8db0fa20707ae4609a
@@ -338,7 +338,7 @@ F src/ctime.c e77f3dc297b4b65c96da78b4ae4272fdfae863d7
 F src/date.c 95c9a8d00767e7221a8e9a31f4e913fc8029bf6b
 F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d
 F src/delete.c 76c084f0265f4a3cd1ecf17eee112a94f1ccbc05
-F src/expr.c be8772ac5019400096eea179c1bfd5acc420bde9
+F src/expr.c f433feeeaa43d52a4e029066a1af02bac9ed5f1a
 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
 F src/fkey.c e2be0968c1adc679c87e467aa5b4f167588f38a8
 F src/func.c 29cc9acb170ec1387b9f63eb52cd85f8de96c771
@@ -466,7 +466,7 @@ F src/wal.h 6dd221ed384afdc204bc61e25c23ef7fd5a511f2
 F src/walker.c 2d2cc7fb0f320f7f415215d7247f3c584141ac09
 F src/where.c c7cdfd54f383090bb801cdd50d36de1a24684bb2
 F src/whereInt.h 14dd243e13b81cbb0a66063d38b70f93a7d6e613
-F src/wherecode.c 0c790c422ea5ecb6c83d6a78f2c4ebc036eea90e
+F src/wherecode.c 0c99e2e97c23ec0b0d64071b3590d3a5e6091a96
 F src/whereexpr.c aa54bf11adf6bc7e52f56281f436ab5fd421ce16
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
@@ -1520,7 +1520,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 838c50a5bf46fd0340839d577fa28ba02b4f2034
-R 960a362fd9424a163c5a4d069783cdea
+P 25f6ed8de4df9c9890d4a352a6d11084433e82ea
+R 19a9e7a69bf070f3aad327c389d879a1
 U drh
-Z 2276dcfeffa9ab927fd9ef765fca4810
+Z c33731cf7b01c5dd25f3f1c4114950f7
index 7ec267fc1ebdc1edef7019a57e820172f1be0a56..6e72ba55fc85b22aa06460bc7d40f346a056d21a 100644 (file)
@@ -1 +1 @@
-25f6ed8de4df9c9890d4a352a6d11084433e82ea
\ No newline at end of file
+1e3bc3698a4b779e6af8e3c727929c4dbddf3edb
\ No newline at end of file
index 0f599703119eae0b8c2f0dac3f10578f9e7288e3..572edaa541566de3ee2e6f36031537a3a797c847 100644 (file)
@@ -1952,6 +1952,7 @@ static Select *isCandidateForInOpt(Expr *pX){
   assert( pTab->pSelect==0 );            /* FROM clause is not a view */
   if( IsVirtual(pTab) ) return 0;        /* FROM clause not a virtual table */
   pEList = p->pEList;
+  assert( pEList!=0 );
 
   /* All SELECT results must be columns. */
   for(i=0; i<pEList->nExpr; i++){
@@ -2103,7 +2104,6 @@ int sqlite3FindInIndex(
   int mustBeUnique;                     /* True if RHS must be unique */
   Vdbe *v = sqlite3GetVdbe(pParse);     /* Virtual machine being coded */
 
-  if( pParse->db->mallocFailed ) return IN_INDEX_NOOP;
   assert( pX->op==TK_IN );
   mustBeUnique = (inFlags & IN_INDEX_LOOP)!=0;
 
index 2ef9a46b5dec18161405fb625850e253cf85ebda..fbf6ad1946b89cdf4c15a59e33cf45c06e333721 100644 (file)
@@ -383,7 +383,7 @@ static int codeEqualityTerm(
     sqlite3VdbeAddOp2(v, OP_Null, 0, iReg);
 #ifndef SQLITE_OMIT_SUBQUERY
   }else{
-    int eType;
+    int eType = IN_INDEX_NOOP;
     int iTab;
     struct InLoop *pIn;
     WhereLoop *pLoop = pLevel->pWLoop;
@@ -436,13 +436,13 @@ static int codeEqualityTerm(
           pLhs = sqlite3ExprListAppend(pParse, pLhs, pNewLhs);
         }
       }
-
-      pX->x.pSelect->pEList = pRhs;
-      pX->pLeft->x.pList = pLhs;
-
-      eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap);
-      pX->x.pSelect->pEList = pOrigRhs;
-      pX->pLeft->x.pList = pOrigLhs;
+      if( !db->mallocFailed ){
+        pX->x.pSelect->pEList = pRhs;
+        pX->pLeft->x.pList = pLhs;
+        eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap);
+        pX->x.pSelect->pEList = pOrigRhs;
+        pX->pLeft->x.pList = pOrigLhs;
+      }
       sqlite3ExprListDelete(pParse->db, pLhs);
       sqlite3ExprListDelete(pParse->db, pRhs);
     }