aboutsummaryrefslogtreecommitdiff
path: root/src/printf.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2004-02-21 19:41:04 +0000
committerdrh <drh@noemail.net>2004-02-21 19:41:04 +0000
commitb621c237752472ee01e551abaeb74d8625065d7d (patch)
treee7e0c1b45bcbf544764fc9f39082a699b0802118 /src/printf.c
parent3e7bc9ca1c46723dc8cc79b47113955ad37ff02b (diff)
downloadsqlite-b621c237752472ee01e551abaeb74d8625065d7d.tar.gz
sqlite-b621c237752472ee01e551abaeb74d8625065d7d.zip
Test cases for printf of double overflows. (CVS 1260)
FossilOrigin-Name: 96a6d2d3ff5bd0aaff188ee1c5e2f02cbea435b2
Diffstat (limited to 'src/printf.c')
-rw-r--r--src/printf.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/printf.c b/src/printf.c
index d0785d1d7..3cd794280 100644
--- a/src/printf.c
+++ b/src/printf.c
@@ -411,12 +411,11 @@ static int vxprintf(
/* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
exp = 0;
if( realvalue>0.0 ){
- int k = 0;
- while( realvalue>=1e8 && k++<100 ){ realvalue *= 1e-8; exp+=8; }
- while( realvalue>=10.0 && k++<100 ){ realvalue *= 0.1; exp++; }
- while( realvalue<1e-8 && k++<100 ){ realvalue *= 1e8; exp-=8; }
- while( realvalue<1.0 && k++<100 ){ realvalue *= 10.0; exp--; }
- if( k>=100 ){
+ while( realvalue>=1e8 && exp<=350 ){ realvalue *= 1e-8; exp+=8; }
+ while( realvalue>=10.0 && exp<=350 ){ realvalue *= 0.1; exp++; }
+ while( realvalue<1e-8 && exp>=-350 ){ realvalue *= 1e8; exp-=8; }
+ while( realvalue<1.0 && exp>=-350 ){ realvalue *= 10.0; exp--; }
+ if( exp>350 || exp<-350 ){
bufpt = "NaN";
length = 3;
break;