diff options
| author | Dmitry Stogov <dmitry@php.net> | 2007-12-24 18:09:50 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2007-12-24 18:09:50 +0000 |
| commit | ed5a424b4f419ba293f0d4ea31cfb98b83ec92c8 (patch) | |
| tree | 8aa61e0ee0979864c7dce8b1e9ed3da33e2d75ef /Zend/zend_operators.c | |
| parent | 7c75fe7b8ce1531924bc71713ee34dceaeb9956c (diff) | |
| download | php-git-ed5a424b4f419ba293f0d4ea31cfb98b83ec92c8.tar.gz | |
Additional fix for bug #42868
Diffstat (limited to 'Zend/zend_operators.c')
| -rw-r--r-- | Zend/zend_operators.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index c177c3ec8f..c2271f1734 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -186,36 +186,38 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) #define MAX_UNSIGNED_INT ((double) LONG_MAX * 2) + 1 #ifdef _WIN64 # define DVAL_TO_LVAL(d, l) \ - if ((d) > LONG_MAX) { \ - if ((d) > MAX_UNSIGNED_INT) { \ - (l) = LONG_MAX; \ - } else { \ - (l) = (long)(unsigned long)(__int64) (d); \ - } \ - } else { \ - if((d) < LONG_MIN) { \ - (l) = LONG_MIN; \ - } else { \ - (l) = (long) (d); \ - } \ - } + if ((d) > LONG_MAX) { \ + (l) = (long)(unsigned long)(__int64) (d); \ + } else { \ + (l) = (long) (d); \ + } +#elif !defined(_WIN64) && __WORDSIZE == 64 +# define DVAL_TO_LVAL(d, l) \ + if ((d) >= LONG_MAX) { \ + (l) = LONG_MAX; \ + } else if ((d) <= LONG_MIN) { \ + (l) = LONG_MIN; \ + } else {\ + (l) = (long) (d); \ + } #else # define DVAL_TO_LVAL(d, l) \ - if ((d) > LONG_MAX) { \ - if ((d) > MAX_UNSIGNED_INT) { \ - (l) = LONG_MAX; \ - } else { \ - (l) = (unsigned long) (d); \ - } \ - } else { \ - if((d) < LONG_MIN) { \ - (l) = LONG_MIN; \ - } else { \ - (l) = (long) (d); \ - } \ - } + if ((d) > LONG_MAX) { \ + if ((d) > MAX_UNSIGNED_INT) { \ + (l) = LONG_MAX; \ + } else { \ + (l) = (unsigned long) (d); \ + } \ + } else { \ + if((d) < LONG_MIN) { \ + (l) = LONG_MIN; \ + } else { \ + (l) = (long) (d); \ + } \ + } #endif + #define zendi_convert_to_long(op, holder, result) \ if (op == result) { \ convert_to_long(op); \ |
