From 0038db22510cce37b24491c266123ba5b1e93953 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 26 Aug 2019 13:14:53 +0200 Subject: [PATCH] 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. --- Zend/zend_execute.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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: -- 2.40.0