From: Nikita Popov Date: Mon, 26 Aug 2019 11:14:53 +0000 (+0200) Subject: Avoid duplicate "non well-formed" warning X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0038db22510cce37b24491c266123ba5b1e93953;p=php Avoid duplicate "non well-formed" warning The arginfo checking code for internal functions should not generate this warning, as it will be thrown by zpp. --- diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 52ba9ee700..5151dfc3f7 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -865,10 +865,27 @@ static zend_bool zend_verify_weak_scalar_type_hint_no_sideeffect(zend_uchar type } case IS_LONG: { zend_long dest; + if (Z_TYPE_P(arg) == IS_STRING) { + /* Handle this case separately to avoid the "non well-formed" warning */ + double dval; + zend_uchar type = is_numeric_string(Z_STRVAL_P(arg), Z_STRLEN_P(arg), NULL, &dval, 1); + if (type == IS_LONG) { + return 1; + } + if (type == IS_DOUBLE) { + return !zend_isnan(dval) && ZEND_DOUBLE_FITS_LONG(dval); + + } + return 0; + } return zend_parse_arg_long_weak(arg, &dest); } case IS_DOUBLE: { double dest; + if (Z_TYPE_P(arg) == IS_STRING) { + /* Handle this case separately to avoid the "non well-formed" warning */ + return is_numeric_string(Z_STRVAL_P(arg), Z_STRLEN_P(arg), NULL, NULL, 1) != 0; + } return zend_parse_arg_double_weak(arg, &dest); } case IS_STRING: