Browse Source

fix #41517 (different behaviour of floatval() in Unicode mode)

PHAR_1_2
Antony Dovgal 19 years ago
parent
commit
eab558a79e
  1. 2
      Zend/zend_API.c
  2. 9
      Zend/zend_operators.h

2
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;

9
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;

Loading…
Cancel
Save