I knew, this fix seems ugly
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2015, PHP 7.0.1
+- Standard:
+ . Fixed bug #70808 (array_merge_recursive corrupts memory of unset items).
+ (laruence)
+
- XSL:
. Fixed bug #70678 (PHP7 returns true when false is expected). (Felipe)
if (Z_TYPE_P(dest_zval) == IS_NULL) {
convert_to_array_ex(dest_zval);
add_next_index_null(dest_zval);
+ } else if (Z_TYPE_P(dest_zval) == IS_ARRAY) {
+ if (UNEXPECTED(Z_ARRVAL_P(dest_zval)->nNextFreeElement > Z_ARRVAL_P(dest_zval)->nNumUsed)) {
+ Z_ARRVAL_P(dest_zval)->nNextFreeElement = Z_ARRVAL_P(dest_zval)->nNumUsed;
+ }
} else {
convert_to_array_ex(dest_zval);
}
--- /dev/null
+--TEST--
+Bug #70808 (array_merge_recursive corrupts memory of unset items)
+--FILE--
+<?php
+
+$arr1 = array("key" => array(0, 1));
+$arr2 = array("key" => array(2));
+
+unset($arr1["key"][1]);
+
+$result = array_merge_recursive($arr1, $arr2);
+print_r($result);
+?>
+--EXPECT--
+Array
+(
+ [key] => Array
+ (
+ [0] => 0
+ [1] => 2
+ )
+
+)