diff options
author | danielk1977 <danielk1977@noemail.net> | 2007-09-04 15:38:57 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2007-09-04 15:38:57 +0000 |
commit | 5bccfc95b1618aa322cf252d2d47ae7f9f101c54 (patch) | |
tree | 9aea402efb5241a2663b756613cdccf7efcb742a /src | |
parent | 7c836f06d3229a4c62f13fd2590c392c2340fc52 (diff) | |
download | sqlite-5bccfc95b1618aa322cf252d2d47ae7f9f101c54.tar.gz sqlite-5bccfc95b1618aa322cf252d2d47ae7f9f101c54.zip |
Fix a problem whereby the *ppVtab output buffer passed to sqlite3_module.xConstruct() could be invalidated (freed) if a malloc() failure occured within a call to sqlite3_declare_vtab(). (CVS 4397)
FossilOrigin-Name: efd61df1b9170f0134787ae17ac996a7eff64add
Diffstat (limited to 'src')
-rw-r--r-- | src/vtab.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/vtab.c b/src/vtab.c index d1239fc4b..66429921c 100644 --- a/src/vtab.c +++ b/src/vtab.c @@ -11,7 +11,7 @@ ************************************************************************* ** This file contains code used to help implement virtual tables. ** -** $Id: vtab.c,v 1.56 2007/08/29 14:06:23 danielk1977 Exp $ +** $Id: vtab.c,v 1.57 2007/09/04 15:38:58 danielk1977 Exp $ */ #ifndef SQLITE_OMIT_VIRTUALTABLE #include "sqliteInt.h" @@ -343,7 +343,7 @@ static int vtabCallConstructor( ){ int rc; int rc2; - sqlite3_vtab *pVtab; + sqlite3_vtab *pVtab = 0; const char *const*azArg = (const char *const*)pTab->azModuleArg; int nArg = pTab->nModuleArg; char *zErr = 0; @@ -359,12 +359,12 @@ static int vtabCallConstructor( db->pVTab = pTab; rc = sqlite3SafetyOff(db); assert( rc==SQLITE_OK ); - rc = xConstruct(db, pMod->pAux, nArg, azArg, &pTab->pVtab, &zErr); + rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVtab, &zErr); rc2 = sqlite3SafetyOn(db); - pVtab = pTab->pVtab; if( rc==SQLITE_OK && pVtab ){ pVtab->pModule = pMod->pModule; pVtab->nRef = 1; + pTab->pVtab = pVtab; } if( SQLITE_OK!=rc ){ |