diff options
author | drh <drh@noemail.net> | 2010-07-26 11:07:20 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2010-07-26 11:07:20 +0000 |
commit | 174b9a166d293445dcc3075c292b78115b62be8f (patch) | |
tree | 1a5d8aeb2c14be45b0e4656208b0aec5815d5acf /src/printf.c | |
parent | d46def77db74a7dfadabb16da57c25d83af0c248 (diff) | |
parent | b975598ea0b3dbb1145513b0adada002c3c581bb (diff) | |
download | sqlite-174b9a166d293445dcc3075c292b78115b62be8f.tar.gz sqlite-174b9a166d293445dcc3075c292b78115b62be8f.zip |
Make sure all memory from sqlite3DbMalloc() is freed by sqlite3DbFree()
and all memory from sqlite3_malloc() is freed by sqlite3_free().
FossilOrigin-Name: 629e38a8c9e31111e351fe4625a5835576d23584
Diffstat (limited to 'src/printf.c')
-rw-r--r-- | src/printf.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/printf.c b/src/printf.c index 6ab230b88..da2fdf610 100644 --- a/src/printf.c +++ b/src/printf.c @@ -772,7 +772,11 @@ void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ }else{ p->nAlloc = (int)szNew; } - zNew = sqlite3DbMallocRaw(p->db, p->nAlloc ); + if( p->useMalloc==1 ){ + zNew = sqlite3DbMallocRaw(p->db, p->nAlloc ); + }else{ + zNew = sqlite3_malloc(p->nAlloc); + } if( zNew ){ memcpy(zNew, p->zText, p->nChar); sqlite3StrAccumReset(p); @@ -797,7 +801,11 @@ char *sqlite3StrAccumFinish(StrAccum *p){ if( p->zText ){ p->zText[p->nChar] = 0; if( p->useMalloc && p->zText==p->zBase ){ - p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 ); + if( p->useMalloc==1 ){ + p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 ); + }else{ + p->zText = sqlite3_malloc(p->nChar+1); + } if( p->zText ){ memcpy(p->zText, p->zBase, p->nChar+1); }else{ @@ -813,7 +821,11 @@ char *sqlite3StrAccumFinish(StrAccum *p){ */ void sqlite3StrAccumReset(StrAccum *p){ if( p->zText!=p->zBase ){ - sqlite3DbFree(p->db, p->zText); + if( p->useMalloc==1 ){ + sqlite3DbFree(p->db, p->zText); + }else{ + sqlite3_free(p->zText); + } } p->zText = 0; } @@ -895,6 +907,7 @@ char *sqlite3_vmprintf(const char *zFormat, va_list ap){ if( sqlite3_initialize() ) return 0; #endif sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH); + acc.useMalloc = 2; sqlite3VXPrintf(&acc, 0, zFormat, ap); z = sqlite3StrAccumFinish(&acc); return z; |