]> granicus.if.org Git - php/commitdiff
Fix non-numbers printing (#6142)
authorStanislav Malyshev <stas@php.net>
Mon, 14 Aug 2000 10:02:14 +0000 (10:02 +0000)
committerStanislav Malyshev <stas@php.net>
Mon, 14 Aug 2000 10:02:14 +0000 (10:02 +0000)
# Please, somebody knowing about floats - check if there's more non-numbers
# seems we should check for all of them

ext/standard/formatted_print.c

index f271ac9daa58b22cd4f2ddf53c8fbf56c1714a6b..1db945192851d1fff09cb70c89ac37d0fa84eb75 100644 (file)
@@ -252,6 +252,39 @@ php_sprintf_appenddouble(char **buffer, int *pos,
        } else if (precision > MAX_FLOAT_PRECISION) {
                precision = MAX_FLOAT_PRECISION;
        }
+       
+       if(
+#if defined(HAVE_ISNAN)
+       isnan(number)
+#elif defined(NAN)
+       number == NAN
+#else 
+       0
+#endif
+       ) {
+               sign = (number<0);
+               php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding,
+                                                                alignment, precision, sign, 0);
+               return;
+       }
+
+       if(
+#if defined(HAVE_ISISINF)
+       isinf(number)
+#elif defined(HAVE_ISFINITE)
+       !isfinite(number)
+#elif defined(HAVE_FINITE)
+       !finite(number)
+#else
+       0
+#endif
+       ) {
+               sign = (number<0);
+               php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding,
+                                                                alignment, precision, sign, 0);
+               return;
+       }
+
        cvt = php_convert_to_decimal(number, precision, &decpt, &sign, (fmt == 'e'));
 
        if (sign) {