cvs: php4 /ext/standard array.c
| From: | Jeroen van Wolffelaar | 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);
}
}