1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 08:12:21 +01:00
This commit is contained in:
Thomas Punt
2016-04-15 23:13:50 +01:00
committed by Anatol Belski
parent 6f4860545b
commit 39052d4d75
2 changed files with 23 additions and 6 deletions

View File

@@ -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();

View File

@@ -0,0 +1,17 @@
--TEST--
Bug #72017 (incorrect truncation due to floating point precision issue)
--FILE--
<?php
var_dump(range(4.5, 4.2, 0.1));
?>
--EXPECT--
array(4) {
[0]=>
float(4.5)
[1]=>
float(4.4)
[2]=>
float(4.3)
[3]=>
float(4.2)
}