]> granicus.if.org Git - php/commitdiff
Avoid duplicate "non well-formed" warning
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Aug 2019 11:14:53 +0000 (13:14 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Aug 2019 11:16:02 +0000 (13:16 +0200)
The arginfo checking code for internal functions should not generate
this warning, as it will be thrown by zpp.

Zend/zend_execute.c

index 52ba9ee7000a154748032e5cefe2d887d551a7fe..5151dfc3f74de26eb9879ca607a815f8e0771bbf 100644 (file)
@@ -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: