mirror of
https://github.com/php/php-src.git
synced 2026-04-01 05:02:27 +02:00
fix #41517 (different behaviour of floatval() in Unicode mode)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user