summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorThomas Punt <tpunt@hotmail.co.uk>2016-04-15 23:13:50 +0100
committerAnatol Belski <ab@php.net>2016-05-16 19:15:40 +0200
commit39052d4d750ee0b7e56fd39edecd860b1a37ac57 (patch)
treede79c596ab47b6a71d5730e2c4128f24b92c6a22 /ext/standard/array.c
parent6f4860545bde2542a7b73b37707477693a0707bb (diff)
downloadphp-git-39052d4d750ee0b7e56fd39edecd860b1a37ac57.tar.gz
Resolve bug #72017
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 9e21295d85..0800ac017c 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2104,7 +2104,7 @@ PHP_FUNCTION(array_fill_keys)
php_error_docref(NULL, E_WARNING, "The supplied range exceeds the maximum array size: start=%0.0f end=%0.0f", end, start); \
RETURN_FALSE; \
} \
- size = (uint32_t)__calc_size; \
+ size = (uint32_t)round(__calc_size); \
array_init_size(return_value, size); \
zend_hash_real_init(Z_ARRVAL_P(return_value), 1); \
} while (0)
@@ -2216,7 +2216,7 @@ PHP_FUNCTION(range)
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
}
} else if (Z_TYPE_P(zlow) == IS_DOUBLE || Z_TYPE_P(zhigh) == IS_DOUBLE || is_step_double) {
- double low, high;
+ double low, high, element;
uint32_t i, size;
double_str:
low = zval_get_double(zlow);
@@ -2237,8 +2237,8 @@ double_str:
RANGE_CHECK_DOUBLE_INIT_ARRAY(low, high);
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
- for (i = 0; i < size; ++i) {
- Z_DVAL(tmp) = low - (i * step);
+ for (i = 0; i < size && (element = low - (i * step)) <= low && element >= high; ++i) {
+ Z_DVAL(tmp) = element;
ZEND_HASH_FILL_ADD(&tmp);
}
} ZEND_HASH_FILL_END();
@@ -2251,8 +2251,8 @@ double_str:
RANGE_CHECK_DOUBLE_INIT_ARRAY(high, low);
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
- for (i = 0; i < size; ++i) {
- Z_DVAL(tmp) = low + (i * step);
+ for (i = 0; i < size && (element = low + (i * step)) <= high && element >= low; ++i) {
+ Z_DVAL(tmp) = element;
ZEND_HASH_FILL_ADD(&tmp);
}
} ZEND_HASH_FILL_END();