diff options
Diffstat (limited to 'ext/standard')
-rw-r--r-- | ext/standard/config.m4 | 15 | ||||
-rw-r--r-- | ext/standard/tests/math/bug74039.phpt | 28 |
2 files changed, 36 insertions, 7 deletions
diff --git a/ext/standard/config.m4 b/ext/standard/config.m4 index ec90af9227..8360cc1552 100644 --- a/ext/standard/config.m4 +++ b/ext/standard/config.m4 @@ -349,7 +349,8 @@ dnl Check for available functions dnl dnl log2 could be used to improve the log function, however it requires C99. The check for log2 should be turned on, dnl as soon as we support C99. -AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan mempcpy strpncpy) +AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass mempcpy strpncpy) +AC_CHECK_DECLS([isnan, isinf], [], [], [[#include <math.h>]]) AC_FUNC_FNMATCH dnl @@ -420,7 +421,7 @@ AC_TRY_RUN([ #include <math.h> #include <stdlib.h> -#ifdef HAVE_ISNAN +#ifdef HAVE_DECL_ISNAN #define zend_isnan(a) isnan(a) #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) @@ -451,11 +452,11 @@ AC_TRY_RUN([ #include <math.h> #include <stdlib.h> -#ifdef HAVE_ISINF +#ifdef HAVE_DECL_ISINF #define zend_isinf(a) isinf(a) #elif defined(INFINITY) /* Might not work, but is required by ISO C99 */ -#define zend_isinf(a) (((a)==INFINITY)?1:0) +#define zend_isinf(a) (((a)==INFINITY || (a)==-INFINITY)?1:0) #elif defined(HAVE_FPCLASS) #define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) #else @@ -485,11 +486,11 @@ AC_TRY_RUN([ #include <math.h> #include <stdlib.h> -#ifdef HAVE_ISINF +#ifdef HAVE_DECL_ISINF #define zend_isinf(a) isinf(a) #elif defined(INFINITY) /* Might not work, but is required by ISO C99 */ -#define zend_isinf(a) (((a)==INFINITY)?1:0) +#define zend_isinf(a) (((a)==INFINITY || (a)==-INFINITY)?1:0) #elif defined(HAVE_FPCLASS) #define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) #else @@ -520,7 +521,7 @@ AC_TRY_RUN([ #include <math.h> #include <stdlib.h> -#ifdef HAVE_ISNAN +#ifdef HAVE_DECL_ISNAN #define zend_isnan(a) isnan(a) #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) diff --git a/ext/standard/tests/math/bug74039.phpt b/ext/standard/tests/math/bug74039.phpt new file mode 100644 index 0000000000..dd0e1fa260 --- /dev/null +++ b/ext/standard/tests/math/bug74039.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #74039: is_infinite(-INF) returns false +--FILE-- +<?php + +var_dump(is_finite(INF)); +var_dump(is_infinite(INF)); +var_dump(is_nan(INF)); + +var_dump(is_finite(-INF)); +var_dump(is_infinite(-INF)); +var_dump(is_nan(-INF)); + +var_dump(is_finite(NAN)); +var_dump(is_infinite(NAN)); +var_dump(is_nan(NAN)); + +?> +--EXPECT-- +bool(false) +bool(true) +bool(false) +bool(false) +bool(true) +bool(false) +bool(false) +bool(false) +bool(true) |