@@ -2104,7 +2104,7 @@ PHP_FUNCTION(array_fill_keys)
2104
2104
php_error_docref(NULL, E_WARNING, "The supplied range exceeds the maximum array size: start=%0.0f end=%0.0f", end, start); \
2105
2105
RETURN_FALSE; \
2106
2106
} \
2107
- size = (uint32_t)__calc_size; \
2107
+ size = (uint32_t)round( __calc_size) ; \
2108
2108
array_init_size(return_value, size); \
2109
2109
zend_hash_real_init(Z_ARRVAL_P(return_value), 1); \
2110
2110
} while (0)
@@ -2216,7 +2216,7 @@ PHP_FUNCTION(range)
2216
2216
zend_hash_next_index_insert_new (Z_ARRVAL_P (return_value ), & tmp );
2217
2217
}
2218
2218
} else if (Z_TYPE_P (zlow ) == IS_DOUBLE || Z_TYPE_P (zhigh ) == IS_DOUBLE || is_step_double ) {
2219
- double low , high ;
2219
+ double low , high , element ;
2220
2220
uint32_t i , size ;
2221
2221
double_str :
2222
2222
low = zval_get_double (zlow );
@@ -2237,8 +2237,8 @@ PHP_FUNCTION(range)
2237
2237
RANGE_CHECK_DOUBLE_INIT_ARRAY (low , high );
2238
2238
2239
2239
ZEND_HASH_FILL_PACKED (Z_ARRVAL_P (return_value )) {
2240
- for (i = 0 ; i < size ; ++ i ) {
2241
- Z_DVAL (tmp ) = low - ( i * step ) ;
2240
+ for (i = 0 ; i < size && ( element = low - ( i * step )) <= low && element >= high ; ++ i ) {
2241
+ Z_DVAL (tmp ) = element ;
2242
2242
ZEND_HASH_FILL_ADD (& tmp );
2243
2243
}
2244
2244
} ZEND_HASH_FILL_END ();
@@ -2251,8 +2251,8 @@ PHP_FUNCTION(range)
2251
2251
RANGE_CHECK_DOUBLE_INIT_ARRAY (high , low );
2252
2252
2253
2253
ZEND_HASH_FILL_PACKED (Z_ARRVAL_P (return_value )) {
2254
- for (i = 0 ; i < size ; ++ i ) {
2255
- Z_DVAL (tmp ) = low + ( i * step ) ;
2254
+ for (i = 0 ; i < size && ( element = low + ( i * step )) <= high && element >= low ; ++ i ) {
2255
+ Z_DVAL (tmp ) = element ;
2256
2256
ZEND_HASH_FILL_ADD (& tmp );
2257
2257
}
2258
2258
} ZEND_HASH_FILL_END ();
0 commit comments