From: drh Date: Sat, 20 Nov 2004 18:13:10 +0000 (+0000) Subject: Fix segfaults that might occur after a malloc failure. (CVS 2119) X-Git-Tag: version-3.6.10~4031 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73c42a13862c92c6c7baf698a95b24a16028b3f4;p=thirdparty%2Fsqlite.git Fix segfaults that might occur after a malloc failure. (CVS 2119) FossilOrigin-Name: 368774487e7a0266465f5a1c2701c9b14573d26c --- diff --git a/manifest b/manifest index c97d3ac349..bd6e3351c7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Documentation\sfor\sREINDEX\sand\sALTER\sTABLE\scommands.\s(CVS\s2118) -D 2004-11-20T08:17:18 +C Fix\ssegfaults\sthat\smight\soccur\safter\sa\smalloc\sfailure.\s(CVS\s2119) +D 2004-11-20T18:13:10 F Makefile.in e747bb5ba34ccbdd81f79dcf1b2b33c02817c21d F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1 @@ -31,10 +31,10 @@ F src/attach.c e49d09dad9f5f9fb10b4b0c1be5a70ae4c45e689 F src/auth.c 3b81f2a42f48a62c2c9c9b0eda31a157c681edea F src/btree.c 49b09718cd988d1c7c981b03e94679bc10b5f711 F src/btree.h 861e40b759a195ba63819740e484390012cf81ab -F src/build.c a43f3b8f452dbd28ad94fad788693f3fc2336908 +F src/build.c c7dd57fdbb330d65df241277291cad8e58687a46 F src/date.c 65536e7ea04fdde6e0551264fca15966966e171f F src/delete.c be9d039b819f4a5d0fdfaeceace139ba189ef819 -F src/expr.c 4ee3e47358c92a919062255b14057a7a8f641e01 +F src/expr.c 90f440e1fe065717bbe391cc4de455997794399d F src/func.c b668e5ad043176049454c95a6a780367a0e8f6bb F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5 F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84 @@ -260,7 +260,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25 F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/whentouse.tcl fdacb0ba2d39831e8a6240d05a490026ad4c4e4c -P 5efa2d2a602c3b7249c4e6701e97b16b5ad0280d -R 502686892546d476cbd8522ca98f27e6 -U danielk1977 -Z 626ea436eea0d0f50a92b6b634fdfd52 +P aceaa5f6e97c93962f5d6d14de8a490efa619db4 +R 8f9d5443bb2a95ac89805536ee413fef +U drh +Z 96591b175a33effa711ce86d94861df3 diff --git a/manifest.uuid b/manifest.uuid index 7ad6e663c6..093b3a7fb3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -aceaa5f6e97c93962f5d6d14de8a490efa619db4 \ No newline at end of file +368774487e7a0266465f5a1c2701c9b14573d26c \ No newline at end of file diff --git a/src/build.c b/src/build.c index 0e2384ace0..3a34bceb30 100644 --- a/src/build.c +++ b/src/build.c @@ -22,7 +22,7 @@ ** COMMIT ** ROLLBACK ** -** $Id: build.c,v 1.284 2004/11/19 08:41:34 danielk1977 Exp $ +** $Id: build.c,v 1.285 2004/11/20 18:13:10 drh Exp $ */ #include "sqliteInt.h" #include @@ -136,6 +136,9 @@ void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ va_start(ap, zFormat); zSql = sqlite3VMPrintf(zFormat, ap); va_end(ap); + if( zSql==0 ){ + return; /* A malloc must have failed */ + } pParse->nested++; memcpy(saveBuf, &pParse->nVar, SAVE_SZ); memset(&pParse->nVar, 0, SAVE_SZ); @@ -516,17 +519,22 @@ void sqlite3OpenMasterTable(Vdbe *v, int iDb){ ** does not exist. */ int findDb(sqlite3 *db, Token *pName){ - int i; - Db *pDb; - char *zName = sqlite3NameFromToken(pName); - int n = strlen(zName); - for(pDb=db->aDb, i=0; inDb; i++, pDb++){ - if( n==strlen(pDb->zName) && 0==sqlite3StrICmp(pDb->zName, zName) ){ - sqliteFree(zName); - return i; + int i; /* Database number */ + int n; /* Number of characters in the name */ + Db *pDb; /* A database whose name space is being searched */ + char *zName; /* Name we are searching for */ + + zName = sqlite3NameFromToken(pName); + if( zName ){ + n = strlen(zName); + for(pDb=db->aDb, i=0; inDb; i++, pDb++){ + if( n==strlen(pDb->zName) && 0==sqlite3StrICmp(pDb->zName, zName) ){ + sqliteFree(zName); + return i; + } } + sqliteFree(zName); } - sqliteFree(zName); return -1; } diff --git a/src/expr.c b/src/expr.c index 7567d849d5..a3c8637ea0 100644 --- a/src/expr.c +++ b/src/expr.c @@ -12,7 +12,7 @@ ** This file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** -** $Id: expr.c,v 1.170 2004/11/12 03:56:15 drh Exp $ +** $Id: expr.c,v 1.171 2004/11/20 18:13:10 drh Exp $ */ #include "sqliteInt.h" #include @@ -220,6 +220,9 @@ Expr *sqlite3RegisterExpr(Parse *pParse, Token *pToken){ return 0; } p = sqlite3Expr(TK_REGISTER, 0, 0, pToken); + if( p==0 ){ + return 0; /* Malloc failed */ + } depth = atoi(&pToken->z[1]); if( depth>=0 ){ p->iTable = pParse->nMem++;