summaryrefslogtreecommitdiff
path: root/ext/standard/formatted_print.c
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2000-08-14 10:02:14 +0000
committerStanislav Malyshev <stas@php.net>2000-08-14 10:02:14 +0000
commit97c200b170976fd686c55511a897658b8d0e25f6 (patch)
treeccfccefffc4b61b5cc59658d302b43badee93b83 /ext/standard/formatted_print.c
parent9e750e64b9945d11354db2b9a3aad2708dad94ba (diff)
downloadphp-git-97c200b170976fd686c55511a897658b8d0e25f6.tar.gz
Fix non-numbers printing (#6142)
# Please, somebody knowing about floats - check if there's more non-numbers # seems we should check for all of them
Diffstat (limited to 'ext/standard/formatted_print.c')
-rw-r--r--ext/standard/formatted_print.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c
index f271ac9daa..1db9451928 100644
--- a/ext/standard/formatted_print.c
+++ b/ext/standard/formatted_print.c
@@ -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) {