From: Marcus Boerger Date: Thu, 17 Jul 2003 21:26:25 +0000 (+0000) Subject: Fix text output of numbers with absolute exponent greater than or equal 80. X-Git-Tag: BEFORE_ARG_INFO~207 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=244795a4dfab35407057f5025724d8139a59ef78;p=php Fix text output of numbers with absolute exponent greater than or equal 80. # # Probably not last conclusion on wisdom. But i looked up current apache # sources and they have the same error and so this must do the trick. # --- diff --git a/main/snprintf.c b/main/snprintf.c index 71fb78f9d1..d2cd7d9674 100644 --- a/main/snprintf.c +++ b/main/snprintf.c @@ -152,6 +152,8 @@ ap_php_conv_10(register wide_int num, register bool_int is_unsigned, return (p); } +/* If you change this value then also change bug24640.phpt. + */ #define NDIG 80 @@ -291,6 +293,7 @@ char * ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf) { register int r2; + int mvl; double fi, fj; register char *p, *p1; @@ -310,9 +313,16 @@ ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf) */ if (fi != 0) { p1 = &buf[NDIG]; - while (p1 > &buf[0] && fi != 0) { + while (fi != 0) { fj = modf(fi / 10, &fi); - *--p1 = (int) ((fj + .03) * 10) + '0'; + if (p1 > &buf[0]) { + *--p1 = (int) ((fj + .03) * 10) + '0'; + } else { + mvl = NDIG - ndigits; + memmove(&buf[mvl], &buf[0], NDIG-mvl-1); + p1 += mvl; + *--p1 = (int) ((fj + .03) * 10) + '0'; + } r2++; } while (p1 < &buf[NDIG])