diff --git a/Zend/zend_API.c b/Zend/zend_API.c index ba9a7744805..0ebdce2d7ba 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -412,7 +412,7 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp long l; int type; - if ((type = is_numeric_unicode(Z_USTRVAL_PP(arg), Z_USTRLEN_PP(arg), &l, p, 0)) == 0) { + if ((type = is_numeric_unicode(Z_USTRVAL_PP(arg), Z_USTRLEN_PP(arg), &l, p, -1)) == 0) { return "double"; } else if (type == IS_LONG) { *p = (double) l; diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 44c4b6a8506..6bc46ecc2e4 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -147,7 +147,7 @@ static inline zend_uchar is_numeric_string(char *str, int length, long *lval, do return 0; } -static inline zend_uchar is_numeric_unicode(UChar *str, int length, long *lval, double *dval, zend_bool allow_errors) +static inline zend_uchar is_numeric_unicode(UChar *str, int length, long *lval, double *dval, int allow_errors) { long local_lval; double local_dval; @@ -200,6 +200,13 @@ static inline zend_uchar is_numeric_unicode(UChar *str, int length, long *lval, } } + if (!allow_errors) { + return 0; + } + if (allow_errors == -1) { + zend_error(E_NOTICE, "A non well formed numeric value encountered"); + } + if (allow_errors) { if (end_ptr_double > end_ptr_long && dval) { *dval = local_dval;