summaryrefslogtreecommitdiff
path: root/strings
diff options
context:
space:
mode:
authorDaniel Fischer <daniel.fischer@oracle.com>2011-09-23 12:18:15 +0200
committerDaniel Fischer <daniel.fischer@oracle.com>2011-09-23 12:18:15 +0200
commit9e4117ba61be9f50997db93fa3d8ee68846a194e (patch)
tree943a147078cea868d8a63dd7a2f310db6a521be7 /strings
parentd5957d0d771a29ebca059d58a3ce70b35f06d903 (diff)
parent8d1c4bba678102bf8293e63319371734b7e5c7b2 (diff)
downloadmariadb-git-9e4117ba61be9f50997db93fa3d8ee68846a194e.tar.gz
merge
Diffstat (limited to 'strings')
-rw-r--r--strings/dtoa.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/strings/dtoa.c b/strings/dtoa.c
index 05c9bb6e529..f7c38b2420d 100644
--- a/strings/dtoa.c
+++ b/strings/dtoa.c
@@ -1009,6 +1009,7 @@ static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc)
Bigint *b1, *p5, *p51=NULL;
int i;
static int p05[3]= { 5, 25, 125 };
+ my_bool overflow= FALSE;
if ((i= k & 3))
b= multadd(b, p05[i-1], 0, alloc);
@@ -1027,16 +1028,19 @@ static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc)
if (!(k>>= 1))
break;
/* Calculate next power of 5 */
- if (p5 < p5_a + P5A_MAX)
- ++p5;
- else if (p5 == p5_a + P5A_MAX)
- p5= mult(p5, p5, alloc);
- else
+ if (overflow)
{
p51= mult(p5, p5, alloc);
Bfree(p5, alloc);
p5= p51;
}
+ else if (p5 < p5_a + P5A_MAX)
+ ++p5;
+ else if (p5 == p5_a + P5A_MAX)
+ {
+ p5= mult(p5, p5, alloc);
+ overflow= TRUE;
+ }
}
if (p51)
Bfree(p51, alloc);