From: Andrei Zmievski Date: Wed, 24 Apr 2002 15:23:43 +0000 (+0000) Subject: Fix Bug #14795. X-Git-Tag: php-4.3.0dev-ZendEngine2-Preview1~451 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5ff970ba7d84d918c15ccda9599219e5e90de83a;p=php Fix Bug #14795. --- diff --git a/ext/standard/array.c b/ext/standard/array.c index c0d967c244..fb59f841ed 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2924,7 +2924,8 @@ PHP_FUNCTION(array_rand) PHP_FUNCTION(array_sum) { zval **input, - **entry; + **entry, + entry_n; int argc = ZEND_NUM_ARGS(); HashPosition pos; double dval; @@ -2948,19 +2949,20 @@ PHP_FUNCTION(array_sum) if (Z_TYPE_PP(entry) == IS_ARRAY || Z_TYPE_PP(entry) == IS_OBJECT) continue; - SEPARATE_ZVAL(entry); - convert_scalar_to_number(*entry TSRMLS_CC); + entry_n = **entry; + zval_copy_ctor(&entry_n); + convert_scalar_to_number(&entry_n TSRMLS_CC); - if (Z_TYPE_PP(entry) == IS_LONG && Z_TYPE_P(return_value) == IS_LONG) { - dval = (double)Z_LVAL_P(return_value) + (double)Z_LVAL_PP(entry); + if (Z_TYPE(entry_n) == IS_LONG && Z_TYPE_P(return_value) == IS_LONG) { + dval = (double)Z_LVAL_P(return_value) + (double)Z_LVAL(entry_n); if ( (double)LONG_MIN <= dval && dval <= (double)LONG_MAX ) { - Z_LVAL_P(return_value) += Z_LVAL_PP(entry); + Z_LVAL_P(return_value) += Z_LVAL(entry_n); continue; } } convert_to_double(return_value); - convert_to_double_ex(entry); - Z_DVAL_P(return_value) += Z_DVAL_PP(entry); + convert_to_double(&entry_n); + Z_DVAL_P(return_value) += Z_DVAL(entry_n); } }