diff options
author | drh <> | 2023-07-08 14:27:55 +0000 |
---|---|---|
committer | drh <> | 2023-07-08 14:27:55 +0000 |
commit | bc532ae15fa1a1cd75f6042fa476bbe2c35c98f6 (patch) | |
tree | 85f346cd6f4deb25412c47b41b3e10f6d62a6e23 /src/util.c | |
parent | 50ba4e3efdcdd8f8e21266cd4f3b19a9d301713d (diff) | |
download | sqlite-bc532ae15fa1a1cd75f6042fa476bbe2c35c98f6.tar.gz sqlite-bc532ae15fa1a1cd75f6042fa476bbe2c35c98f6.zip |
Fix harmless scan-build warnings.
FossilOrigin-Name: beab3c98639be531744e60440223bb9ee76bc15234aff05e5efb273c8241dfd8
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/util.c b/src/util.c index 2b5c193e3..ce0299706 100644 --- a/src/util.c +++ b/src/util.c @@ -933,6 +933,11 @@ int sqlite3Atoi(const char *z){ ** n is positive. Or round to -n signficant digits after the ** decimal point if n is negative. No rounding is performed if ** n is zero. +** +** The significant digits of the decimal representation are +** stored in p->z[] which is a often (but not always) a pointer +** into the middle of p->zBuf[]. There are p->n significant digits. +** The p->z[] array is *not* zero-terminated. */ void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRound){ int i; @@ -1025,14 +1030,16 @@ void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRound){ /* Extract significant digits. */ i = sizeof(p->zBuf)-1; + assert( v>0 ); while( v ){ p->zBuf[i--] = (v%10) + '0'; v /= 10; } - assert( i>=0 ); + assert( i>=0 && i<sizeof(p->zBuf)-1 ); p->n = sizeof(p->zBuf) - 1 - i; + assert( p->n>0 ); assert( p->n<sizeof(p->zBuf) ); p->iDP = p->n + exp; if( iRound<0 ){ iRound = p->iDP - iRound; - if( iRound==0 && p->z[i+1]>='5' ){ + if( iRound==0 && p->zBuf[i+1]>='5' ){ iRound = 1; p->zBuf[i--] = '0'; p->n++; @@ -1061,6 +1068,7 @@ void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRound){ } } p->z = &p->zBuf[i+1]; + assert( i+p->n < sizeof(p->zBuf) ); while( ALWAYS(p->n>0) && p->z[p->n-1]=='0' ){ p->n--; } } |