]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix memory allocation problems when string length exceeds limits. (CVS 5865)
authordrh <drh@noemail.net>
Wed, 5 Nov 2008 17:41:19 +0000 (17:41 +0000)
committerdrh <drh@noemail.net>
Wed, 5 Nov 2008 17:41:19 +0000 (17:41 +0000)
FossilOrigin-Name: b568e325205acaa2f63bce2d6cc2808edc9f2e01

manifest
manifest.uuid
src/vdbeaux.c
src/vdbemem.c

index ee18be8a89c12cfa3128b0f624d300a62af2829e..207a7b2b23a60288acf7c48fcb17debdab538145 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\sCOMMIT\scommand\snow\sworks\seven\sif\sthere\sare\spending\squeries,\sas\slong\nas\sthe\spending\squeries\sare\sreading\sand\snot\swriting\sthe\sdatabase.\s(CVS\s5864)
-D 2008-11-05T16:37:35
+C Fix\smemory\sallocation\sproblems\swhen\sstring\slength\sexceeds\slimits.\s(CVS\s5865)
+D 2008-11-05T17:41:19
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 48172b58e444a9725ec482e0c022a564749acab4
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -194,10 +194,10 @@ F src/vdbe.c b6b989bbd0e306581695f8914c4246905a5c0d14
 F src/vdbe.h 03516f28bf5aca00a53c4dccd6c313f96adb94f6
 F src/vdbeInt.h c9400778d6f801c2cb8ebe6151c909e19dd2d793
 F src/vdbeapi.c ea22e171704906632cd971668359b8c0c5053001
-F src/vdbeaux.c ec1ee5ac4c9aa3ac42c5e5c340960d29f3ec640e
+F src/vdbeaux.c 75258853624ec5fba72039f87397b3d88c586fa1
 F src/vdbeblob.c b0dcebfafedcf9c0addc7901ad98f6f986c08935
 F src/vdbefifo.c 20fda2a7c4c0bcee1b90eb7e545fefcdbf2e1de7
-F src/vdbemem.c c0e9d9947db8968762c7621369f821bb181c1c86
+F src/vdbemem.c ff746621ff0f695507ac9989fe3256ea8bee66ad
 F src/vtab.c 527c180e9c5fca417c9167d02af4b5039f892b4b
 F src/walker.c 488c2660e13224ff70c0c82761118efb547f8f0d
 F src/where.c 171c9b2583944f66484c8552daa85373ce9e949f
@@ -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 8b868604217571cf2f60cdf46adb9721ca071bf9
-R d0a748defad0c6542a6b42006bda2301
+P 51f04aaff2803487933b9dfcf39f27a249f18a98
+R 4df707a8bb3b3962cea01886e81cdebf
 U drh
-Z 8362aa5d8251e71533ab4c0ad20b06f7
+Z 119ecd7805404a0e1040dc60e69dd81f
index 3f7214f859f697c3e64d504745e7035cf00bbe7a..abe52c5e09121327f39d8435c8dd94b259e33e34 100644 (file)
@@ -1 +1 @@
-51f04aaff2803487933b9dfcf39f27a249f18a98
\ No newline at end of file
+b568e325205acaa2f63bce2d6cc2808edc9f2e01
\ No newline at end of file
index 1df94fb1fbd13397288567891aef7cc78cdebec8..4b857a9f8cc70204f165fd1c52dac891eee563bc 100644 (file)
@@ -14,7 +14,7 @@
 ** to version 2.8.7, all this code was combined into the vdbe.c source file.
 ** But that file was getting too big so this subroutines were split out.
 **
-** $Id: vdbeaux.c,v 1.417 2008/11/05 16:37:35 drh Exp $
+** $Id: vdbeaux.c,v 1.418 2008/11/05 17:41:19 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -1229,7 +1229,7 @@ int sqlite3VdbeSetColName(
   assert( p->aColName!=0 );
   pColName = &(p->aColName[idx+var*p->nResColumn]);
   rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel);
-  assert( p->db->mallocFailed || !zName || pColName->flags&MEM_Term );
+  assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 );
   return rc;
 }
 
index 91df34fe397530975483e80b202c5b4a1cfc47f8..c4f72ede89f68a5eec6ec6df5f4b08720a34a666 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.124 2008/10/30 17:21:13 danielk1977 Exp $
+** $Id: vdbemem.c,v 1.125 2008/11/05 17:41:19 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -606,9 +606,6 @@ int sqlite3VdbeMemSetStr(
     }
     flags |= MEM_Term;
   }
-  if( nByte>iLimit ){
-    return SQLITE_TOOBIG;
-  }
 
   /* The following block sets the new values of Mem.z and Mem.xDel. It
   ** also sets a flag in local variable "flags" to indicate the memory
@@ -619,6 +616,9 @@ int sqlite3VdbeMemSetStr(
     if( flags&MEM_Term ){
       nAlloc += (enc==SQLITE_UTF8?1:2);
     }
+    if( nByte>iLimit ){
+      return SQLITE_TOOBIG;
+    }
     if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
       return SQLITE_NOMEM;
     }
@@ -633,6 +633,9 @@ int sqlite3VdbeMemSetStr(
     pMem->xDel = xDel;
     flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
   }
+  if( nByte>iLimit ){
+    return SQLITE_TOOBIG;
+  }
 
   pMem->n = nByte;
   pMem->flags = flags;