diff options
| author | Matt Wilmas <mattwil@php.net> | 2009-06-04 18:20:45 +0000 |
|---|---|---|
| committer | Matt Wilmas <mattwil@php.net> | 2009-06-04 18:20:45 +0000 |
| commit | b907aa43311ab0b5430d2713a54414baaf9c7e20 (patch) | |
| tree | 397f1697ff3ff689eea6ff04611831939df02ef0 /Zend/zend_compile.c | |
| parent | 1787a2272a7d9f3f7c7932f61b57054755e99135 (diff) | |
| download | php-git-b907aa43311ab0b5430d2713a54414baaf9c7e20.tar.gz | |
MFH:
Restored double->long conversion behavior to that of PHP 5.2 (on most platforms) and prior:
* Out-of-range numbers overflow/preserve least significant bits (no LONG_MAX/MIN limit)
* See bug #42868 (presumably-rare platform with different results in 5.2)
* On 32-bit platforms with 64-bit long type, a zend_long64 cast has been added,
otherwise it's the same as 5.2
* Use this conversion method everywhere instead of some plain (long) casts
Added 'L' parameter parsing specifier to ensure a LONG_MAX/MIN limit:
* Essentially what 5.3's new conversion was doing in most cases
* Functions with "limit" or "length" type params could be updated to use this,
and prevent confusing overflow behavior with huge numbers (*also* in 5.2)
- See bug #47854, for example; or even #42868 again
# Test updates coming
Diffstat (limited to 'Zend/zend_compile.c')
| -rw-r--r-- | Zend/zend_compile.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index dfe8595b90..96bea45431 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3997,7 +3997,6 @@ void zend_do_add_static_array_element(znode *result, znode *offset, const znode ALLOC_ZVAL(element); *element = expr->u.constant; if (offset) { - long l; switch (offset->u.constant.type & IS_CONSTANT_TYPE_MASK) { case IS_CONSTANT: /* Ugly hack to denote that this value has a constant index */ @@ -4020,8 +4019,7 @@ void zend_do_add_static_array_element(znode *result, znode *offset, const znode zend_hash_index_update(Z_ARRVAL(result->u.constant), Z_LVAL(offset->u.constant), &element, sizeof(zval *), NULL); break; case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL(offset->u.constant), l); - zend_hash_index_update(Z_ARRVAL(result->u.constant), l, &element, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL(result->u.constant), zend_dval_to_lval(Z_DVAL(offset->u.constant)), &element, sizeof(zval *), NULL); break; case IS_CONSTANT_ARRAY: zend_error(E_ERROR, "Illegal offset type"); |
