diff options
| author | Gustavo André dos Santos Lopes <cataphract@php.net> | 2012-05-22 12:36:28 +0200 |
|---|---|---|
| committer | Stanislav Malyshev <stas@php.net> | 2012-05-23 18:55:36 -0500 |
| commit | acd711685a592c52be200e248154283c6c49c9f8 (patch) | |
| tree | 9930dd583451b3d754db0cc16980ff20a5f1bcf4 /Zend/zend_operators.c | |
| parent | 0838a2b7c559442aac4692a023d044f34c60d24f (diff) | |
| download | php-git-acd711685a592c52be200e248154283c6c49c9f8.tar.gz | |
Fixed bug #62097
This fixes the fix for bug #54547 in 32-bit machines by accepting
float comparisons in 32-bit machines as long as the integer is
not larger than the mantissa.
Diffstat (limited to 'Zend/zend_operators.c')
| -rw-r--r-- | Zend/zend_operators.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 8d4baa6ac8..dd3ee2d8cb 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2041,7 +2041,13 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2) /* {{{ */ if ((ret1=is_numeric_string_ex(Z_STRVAL_P(s1), Z_STRLEN_P(s1), &lval1, &dval1, 0, &oflow1)) && (ret2=is_numeric_string_ex(Z_STRVAL_P(s2), Z_STRLEN_P(s2), &lval2, &dval2, 0, &oflow2))) { +#if ULONG_MAX == 0xFFFFFFFF + if (oflow1 != 0 && oflow1 == oflow2 && dval1 - dval2 == 0. && + ((oflow1 == 1 && dval1 > 9007199254740991. /*0x1FFFFFFFFFFFFF*/) + || (oflow1 == -1 && dval1 < -9007199254740991.))) { +#else if (oflow1 != 0 && oflow1 == oflow2 && dval1 - dval2 == 0.) { +#endif /* both values are integers overflown to the same side, and the * double comparison may have resulted in crucial accuracy lost */ goto string_cmp; |
