mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Allow zend_parse_parameters to handle non-well formed integers, but raise
E_NOTICE in the process.
This commit is contained in:
parent
158ebbd9b5
commit
b5c8fcb5fa
@ -296,7 +296,7 @@ static char *zend_parse_arg_impl(zval **arg, va_list *va, char **spec TSRMLS_DC)
|
||||
double d;
|
||||
int type;
|
||||
|
||||
if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), p, &d, 0)) == 0) {
|
||||
if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), p, &d, -1)) == 0) {
|
||||
return "long";
|
||||
} else if (type == IS_DOUBLE) {
|
||||
*p = (long) d;
|
||||
@ -330,7 +330,7 @@ static char *zend_parse_arg_impl(zval **arg, va_list *va, char **spec TSRMLS_DC)
|
||||
long l;
|
||||
int type;
|
||||
|
||||
if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &l, p, 0)) == 0) {
|
||||
if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &l, p, -1)) == 0) {
|
||||
return "double";
|
||||
} else if (type == IS_LONG) {
|
||||
*p = (double) l;
|
||||
|
@ -65,7 +65,7 @@ ZEND_API zend_bool instanceof_function_ex(zend_class_entry *instance_ce, zend_cl
|
||||
ZEND_API zend_bool instanceof_function(zend_class_entry *instance_ce, zend_class_entry *ce TSRMLS_DC);
|
||||
END_EXTERN_C()
|
||||
|
||||
static inline zend_bool is_numeric_string(char *str, int length, long *lval, double *dval, zend_bool allow_errors)
|
||||
static inline zend_bool is_numeric_string(char *str, int length, long *lval, double *dval, int allow_errors)
|
||||
{
|
||||
long local_lval;
|
||||
double local_dval;
|
||||
@ -116,16 +116,21 @@ static inline zend_bool is_numeric_string(char *str, int length, long *lval, dou
|
||||
} else {
|
||||
end_ptr_double=NULL;
|
||||
}
|
||||
if (allow_errors) {
|
||||
if (end_ptr_double>end_ptr_long && dval) {
|
||||
*dval = local_dval;
|
||||
return IS_DOUBLE;
|
||||
} else if (end_ptr_long && lval) {
|
||||
*lval = local_lval;
|
||||
return IS_LONG;
|
||||
}
|
||||
|
||||
if (!allow_errors) {
|
||||
return 0;
|
||||
}
|
||||
if (allow_errors == -1) {
|
||||
zend_error(E_NOTICE, "A non well formed numeric value encountered");
|
||||
}
|
||||
|
||||
if (end_ptr_double>end_ptr_long && dval) {
|
||||
*dval = local_dval;
|
||||
return IS_DOUBLE;
|
||||
} else if (end_ptr_long && lval) {
|
||||
*lval = local_lval;
|
||||
return IS_LONG;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline char *
|
||||
|
Loading…
Reference in New Issue
Block a user