diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-08-05 15:44:04 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-08-05 15:44:04 +0200 |
commit | 643145b59d03ee9c92390078d545c4c45baca69b (patch) | |
tree | cb5cc13b2277bd3bcd82f6edac073c41f085c4e9 | |
parent | 002908a5c5db8be34973fefe699d7b35b880989e (diff) | |
parent | 6bf8ff6d972b0d3bb2b0265a7b04af8adf0e47bf (diff) | |
download | php-git-643145b59d03ee9c92390078d545c4c45baca69b.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fixed bug #79930
Fix iov_base pointer type for illumos
Backport bless_tests.php changes from PHP 8
-rw-r--r-- | ext/opcache/zend_file_cache.c | 2 | ||||
-rw-r--r-- | ext/standard/array.c | 2 | ||||
-rw-r--r-- | ext/standard/tests/array/bug79930.phpt | 33 |
3 files changed, 35 insertions, 2 deletions
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 9e9463c8fd..44ade7f6bd 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -1025,7 +1025,7 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm) #endif #ifdef HAVE_SYS_UIO_H - vec[0].iov_base = &info; + vec[0].iov_base = (void *)&info; vec[0].iov_len = sizeof(info); vec[1].iov_base = buf; vec[1].iov_len = script->size; diff --git a/ext/standard/array.c b/ext/standard/array.c index 9874c5eaf1..de96a46cd5 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3658,7 +3658,7 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */ return 0; } } else { - Z_TRY_ADDREF_P(src_entry); + Z_TRY_ADDREF_P(src_zval); zend_hash_next_index_insert(Z_ARRVAL_P(dest_zval), src_zval); } zval_ptr_dtor(&tmp); diff --git a/ext/standard/tests/array/bug79930.phpt b/ext/standard/tests/array/bug79930.phpt new file mode 100644 index 0000000000..bb4e1dd86d --- /dev/null +++ b/ext/standard/tests/array/bug79930.phpt @@ -0,0 +1,33 @@ +--TEST-- +Bug #79930: array_merge_recursive() crashes when called with array with single reference +--FILE-- +<?php + +$a = 'a'; +$array = [ + 'value' => $a . 'b', +]; + +// Create rc=1 reference. +array_walk($array, function () {}); + +$m = array_merge_recursive(['value' => 'a'], $array); + +var_dump($a, $array, $m); + +?> +--EXPECT-- +string(1) "a" +array(1) { + ["value"]=> + string(2) "ab" +} +array(1) { + ["value"]=> + array(2) { + [0]=> + string(1) "a" + [1]=> + string(2) "ab" + } +} |