cvs: php4 /ext/standard array.c

From: Date: Fri, 03 Aug 2001 19:18:51 +0000
Subject: cvs: php4 /ext/standard array.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-6517@lists.php.net to get a copy of this message
jeroen Fri Aug 3 15:18:51 2001 EDT Modified files: /php4/ext/standard array.c Log: - Fix array_sum to switch to float on overflow. Fixes bug#12505 Index: php4/ext/standard/array.c diff -u php4/ext/standard/array.c:1.118 php4/ext/standard/array.c:1.119 --- php4/ext/standard/array.c:1.118 Mon Jul 30 04:24:34 2001 +++ php4/ext/standard/array.c Fri Aug 3 15:18:51 2001 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.118 2001/07/30 08:24:34 zeev Exp $ */ +/* $Id: array.c,v 1.119 2001/08/03 19:18:51 jeroen Exp $ */ #include "php.h" #include "php_ini.h" @@ -2809,6 +2809,7 @@ **entry; int argc = ZEND_NUM_ARGS(); HashPosition pos; + double dval; if (argc != 1 || zend_get_parameters_ex(argc, &input) == FAILURE) { WRONG_PARAM_COUNT; @@ -2833,12 +2834,15 @@ convert_scalar_to_number(*entry TSRMLS_CC); if (Z_TYPE_PP(entry) == IS_LONG && Z_TYPE_P(return_value) == IS_LONG) { - Z_LVAL_P(return_value) += Z_LVAL_PP(entry); - } else { - convert_to_double(return_value); - convert_to_double_ex(entry); - Z_DVAL_P(return_value) += Z_DVAL_PP(entry); + dval = (double)Z_LVAL_P(return_value) + (double)Z_LVAL_PP(entry); + if ( (double)LONG_MIN <= dval && dval <= (double)LONG_MAX ) { + Z_LVAL_P(return_value) += Z_LVAL_PP(entry); + continue; + } } + convert_to_double(return_value); + convert_to_double_ex(entry); + Z_DVAL_P(return_value) += Z_DVAL_PP(entry); } }

« previous php.cvs (#6517) next »