aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
authordrh <>2023-07-08 14:27:55 +0000
committerdrh <>2023-07-08 14:27:55 +0000
commitbc532ae15fa1a1cd75f6042fa476bbe2c35c98f6 (patch)
tree85f346cd6f4deb25412c47b41b3e10f6d62a6e23 /src/util.c
parent50ba4e3efdcdd8f8e21266cd4f3b19a9d301713d (diff)
downloadsqlite-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.c12
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--; }
}