diff --git a/Zend/configure.ac b/Zend/configure.ac index 3ebea4b8ed1..5dfdccac6dd 100644 --- a/Zend/configure.ac +++ b/Zend/configure.ac @@ -68,7 +68,7 @@ int zend_sprintf(char *buffer, const char *format, ...); #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) #else -#define zend_isnan(a) 0 +#define zend_isnan(a) ((a) != (a)) #endif #endif diff --git a/Zend/tests/bug73954.phpt b/Zend/tests/bug73954.phpt new file mode 100644 index 00000000000..918f24b0f14 --- /dev/null +++ b/Zend/tests/bug73954.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #73954 (NAN check fails on Alpine Linux with musl) +--FILE-- + +--EXPECTF-- +float(NAN) +bool(true) + +Fatal error: Uncaught TypeError: Argument 1 passed to takes_int() must be of the type integer, float given, called in %s on line 9 and defined in %s:6 +Stack trace: +#0 %s(9): takes_int(NAN) +#1 {main} + thrown in %s on line 6 diff --git a/configure.ac b/configure.ac index dc7bff46eed..5584a4f43a3 100644 --- a/configure.ac +++ b/configure.ac @@ -73,7 +73,7 @@ int zend_sprintf(char *buffer, const char *format, ...); #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) #else -#define zend_isnan(a) 0 +#define zend_isnan(a) ((a) != (a)) #endif #endif