Bug #73954 [Com]: NAN check fails on Alpine Linux with musl

From: Date: Tue, 17 Jan 2017 20:59:03 +0000
Subject: Bug #73954 [Com]: NAN check fails on Alpine Linux with musl
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-206719@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73954&edit=1 ID: 73954 Comment by: alex dot masterow at gmail dot com Reported by: zaq178miami at gmail dot com Summary: NAN check fails on Alpine Linux with musl Status: Feedback Type: Bug Package: *General Issues Operating System: Alpine Linux PHP Version: Irrelevant Assigned To: cmb Block user comment: N Private report: N New Comment: > OP, could you see if is_nan(NAN) returns TRUE? It returns FALSE. > are you certain NAN is actually a NaN? Could you try var_dump(NAN);? float(NAN) The same output as documentation is_nan(). Previous Comments: ------------------------------------------------------------------------ [2017-01-17 20:31:50] ajf@php.net zend_isnan is defined in https://github.com/php/php-src/blob/db894fa6aa6e98811bcc39b1331fc201e33c10ef/Zend/configure.in#L72-L80: #ifndef zend_isnan #ifdef HAVE_ISNAN #define zend_isnan(a) isnan(a) #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) #else #define zend_isnan(a) 0 #endif #endif That last one doesn't look like a safe default. I wonder if it's falling back to that. ((a)!=(a)) would be a safer default. OP, could you see if is_nan(NAN) returns TRUE? On the same note, are you certain NAN is actually a NaN? Could you try var_dump(NAN);? I am wondering if I possibly broke that constant a little while ago. ------------------------------------------------------------------------ [2017-01-17 20:26:03] ajf@php.net Specifically, ZPP and type declarations call to zend_parse_arg_long_weak(). The key line here would be https://github.com/php/php-src/blob/db894fa6aa6e98811bcc39b1331fc201e33c10ef/Zend/zend_API.c#L317: if (UNEXPECTED(zend_isnan(Z_DVAL_P(arg)))) { return 0; } Possibly zend_isnan() is broken here. ------------------------------------------------------------------------ [2017-01-17 20:21:25] ajf@php.net It doesn't use ZPP-the-function, yes, but typehints for userland and internal functions inherit their handling of NaN for integer parameters from ZPP (and actually share the code for this with ZPP internally), which is why I linked the OP to that RFC. ------------------------------------------------------------------------ [2017-01-17 20:05:30] alex dot masterow at gmail dot com I also know about this problem. > What do you get with the following script with musl: > var_dump(chr(NAN)); string(1) "" Unicode: U+0000 HTML: &#0; ------------------------------------------------------------------------ [2017-01-17 17:49:36] cmb@php.net This has nothing to do with ZPP, because it's a userland function. What do you get with the following script with musl: <?php var_dump(chr(NAN)); ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=73954 -- Edit this bug report at https://bugs.php.net/bug.php?id=73954&edit=1

« previous php.bugs (#206719) next »