summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-08-05 15:44:04 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-08-05 15:44:04 +0200
commit643145b59d03ee9c92390078d545c4c45baca69b (patch)
treecb5cc13b2277bd3bcd82f6edac073c41f085c4e9
parent002908a5c5db8be34973fefe699d7b35b880989e (diff)
parent6bf8ff6d972b0d3bb2b0265a7b04af8adf0e47bf (diff)
downloadphp-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.c2
-rw-r--r--ext/standard/array.c2
-rw-r--r--ext/standard/tests/array/bug79930.phpt33
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"
+ }
+}