]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
When an OOM error occurs while resizing an sqlite_value object, make sure
authordrh <drh@noemail.net>
Tue, 11 Nov 2008 00:21:30 +0000 (00:21 +0000)
committerdrh <drh@noemail.net>
Tue, 11 Nov 2008 00:21:30 +0000 (00:21 +0000)
the value of the object is set to NULL.  Ticket #3488. (CVS 5877)

FossilOrigin-Name: 7b9c9b35fffb233e76148182426199d51243fba7

manifest
manifest.uuid
src/vdbemem.c
test/mallocJ.test

index 9ce5a92e5ec05a666e58b575daddf36a6f101012..beb1130dcc84f8baab76ecb7f4fa7ff14aa6cbb5 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\sdocumentation\sof\sthe\sSQLITE_FUNCTION\sauthorizer\scode\sso\sthat\sit\nagrees\swith\show\sSQLite\shas\salways\sbehaved.\s\sTicket\s#3489.\s(CVS\s5876)
-D 2008-11-10T23:54:06
+C When\san\sOOM\serror\soccurs\swhile\sresizing\san\ssqlite_value\sobject,\smake\ssure\nthe\svalue\sof\sthe\sobject\sis\sset\sto\sNULL.\s\sTicket\s#3488.\s(CVS\s5877)
+D 2008-11-11T00:21:30
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 48172b58e444a9725ec482e0c022a564749acab4
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -197,7 +197,7 @@ F src/vdbeapi.c ea22e171704906632cd971668359b8c0c5053001
 F src/vdbeaux.c 75258853624ec5fba72039f87397b3d88c586fa1
 F src/vdbeblob.c b0dcebfafedcf9c0addc7901ad98f6f986c08935
 F src/vdbefifo.c 20fda2a7c4c0bcee1b90eb7e545fefcdbf2e1de7
-F src/vdbemem.c ff746621ff0f695507ac9989fe3256ea8bee66ad
+F src/vdbemem.c 223e03281855515e9474dbf66f157452093a77c2
 F src/vtab.c 527c180e9c5fca417c9167d02af4b5039f892b4b
 F src/walker.c 488c2660e13224ff70c0c82761118efb547f8f0d
 F src/where.c 171c9b2583944f66484c8552daa85373ce9e949f
@@ -428,7 +428,7 @@ F test/mallocF.test 2d5c590ebc2fc7f0dcebdf5aa8498b9aed69107e
 F test/mallocG.test 4584d0d8ddb8009f16ca0c8bab1fa37f6358efa2
 F test/mallocH.test 79b65aed612c9b3ed2dcdaa727c85895fd1bfbdb
 F test/mallocI.test 6e24fe6444bd2999ccc81f984977b44c0d6e5591
-F test/mallocJ.test 110204e20eb8a9475d6df57d07d09c31d4542b07
+F test/mallocJ.test 9ed2275a7857fe1d5f5e1debc68dfdc285fc262f
 F test/malloc_common.tcl 984baeb6c6b185e798827d1187d426acc2bc4962
 F test/manydb.test 8de36b8d33aab5ef295b11d9e95310aeded31af8
 F test/memdb.test a67bda4ff90a38f2b19f6c7f95aa7289e051d893
@@ -654,7 +654,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 239186804c7541abc512da33bba8f6fc7d24a374
-R ee6aa1a2f8d51d75cfc7bd7b3020fdfd
+P 806b6ed202292e386ac3e51cebcfb67f3870cd2f
+R d1d72399c4198836cc46e37f71d2e131
 U drh
-Z db4af086fc1384c13372fd47a63469cd
+Z ffa9723504b4d99f03db9e73564e4aa9
index 352dc3305517d30859aa2804e6ac4d5041727258..bc8a5afab87079893839f6213b69e64429ddcd21 100644 (file)
@@ -1 +1 @@
-806b6ed202292e386ac3e51cebcfb67f3870cd2f
\ No newline at end of file
+7b9c9b35fffb233e76148182426199d51243fba7
\ No newline at end of file
index c4f72ede89f68a5eec6ec6df5f4b08720a34a666..8d96e62df22b490724b36c08db5cca9abede8422 100644 (file)
@@ -15,7 +15,7 @@
 ** only within the VDBE.  Interface routines refer to a Mem using the
 ** name sqlite_value
 **
-** $Id: vdbemem.c,v 1.125 2008/11/05 17:41:19 drh Exp $
+** $Id: vdbemem.c,v 1.126 2008/11/11 00:21:30 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -86,9 +86,6 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
   if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
     if( preserve && pMem->z==pMem->zMalloc ){
       pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
-      if( !pMem->z ){
-        pMem->flags = MEM_Null;
-      }
       preserve = 0;
     }else{
       sqlite3DbFree(pMem->db, pMem->zMalloc);
@@ -104,7 +101,11 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
   }
 
   pMem->z = pMem->zMalloc;
-  pMem->flags &= ~(MEM_Ephem|MEM_Static);
+  if( pMem->z==0 ){
+    pMem->flags = MEM_Null;
+  }else{
+    pMem->flags &= ~(MEM_Ephem|MEM_Static);
+  }
   pMem->xDel = 0;
   return (pMem->z ? SQLITE_OK : SQLITE_NOMEM);
 }
index 58f5b2b333acba2c6f69e2eb66c1dad727e2b2d7..04b4c69f0f893e54a907667b36edc69c142a5603 100644 (file)
@@ -12,7 +12,7 @@
 # This test script checks malloc failures in LIMIT operations for 
 # UPDATE/DELETE statements.
 # 
-# $Id: mallocJ.test,v 1.3 2008/11/04 14:25:06 drh Exp $
+# $Id: mallocJ.test,v 1.4 2008/11/11 00:21:30 drh Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -39,9 +39,10 @@ ifcapable {update_delete_limit} {
 }
 
 # ticket #3467
-do_malloc_test mallocJ-2 -sqlprep {
+do_malloc_test mallocJ-2 -start 114 -sqlprep {
   CREATE TABLE t1(a,b);
   INSERT INTO t1 VALUES(1,2);
+  PRAGMA vdbe_trace=ON;
 } -sqlbody {
   SELECT a, b, 'abc' FROM t1
     UNION