diff options
Diffstat (limited to 'src/printf.c')
-rw-r--r-- | src/printf.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/printf.c b/src/printf.c index eafe842a1..2cd02a851 100644 --- a/src/printf.c +++ b/src/printf.c @@ -736,8 +736,8 @@ void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ } }else{ p->nAlloc += p->nAlloc + N + 1; - if( p->nAlloc > SQLITE_MAX_LENGTH ){ - p->nAlloc = SQLITE_MAX_LENGTH; + if( p->nAlloc > p->mxAlloc ){ + p->nAlloc = p->mxAlloc; if( p->nChar+N >= p->nAlloc ){ sqlite3StrAccumReset(p); p->tooBig = 1; @@ -793,10 +793,11 @@ void sqlite3StrAccumReset(StrAccum *p){ /* ** Initialize a string accumulator */ -static void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n){ +static void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n, int mx){ p->zText = p->zBase = zBase; p->nChar = 0; p->nAlloc = n; + p->mxAlloc = mx; p->useMalloc = 1; p->tooBig = 0; p->mallocFailed = 0; @@ -810,7 +811,8 @@ char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){ char *z; char zBase[SQLITE_PRINT_BUF_SIZE]; StrAccum acc; - sqlite3StrAccumInit(&acc, zBase, sizeof(zBase)); + sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), + db ? db->aLimit[SQLITE_LIMIT_LENGTH] : SQLITE_MAX_LENGTH); vxprintf(&acc, 1, zFormat, ap); z = sqlite3StrAccumFinish(&acc); if( acc.mallocFailed && db ){ @@ -840,7 +842,7 @@ char *sqlite3_vmprintf(const char *zFormat, va_list ap){ char *z; char zBase[SQLITE_PRINT_BUF_SIZE]; StrAccum acc; - sqlite3StrAccumInit(&acc, zBase, sizeof(zBase)); + sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH); vxprintf(&acc, 0, zFormat, ap); z = sqlite3StrAccumFinish(&acc); return z; @@ -873,7 +875,7 @@ char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){ if( n<=0 ){ return zBuf; } - sqlite3StrAccumInit(&acc, zBuf, n); + sqlite3StrAccumInit(&acc, zBuf, n, 0); acc.useMalloc = 0; va_start(ap,zFormat); vxprintf(&acc, 0, zFormat, ap); @@ -892,7 +894,7 @@ void sqlite3DebugPrintf(const char *zFormat, ...){ va_list ap; StrAccum acc; char zBuf[500]; - sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf)); + sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0); acc.useMalloc = 0; va_start(ap,zFormat); vxprintf(&acc, 0, zFormat, ap); |