diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2019-11-25 15:57:13 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-11-25 15:57:56 +0100 |
commit | 717730ddd103c08dd89a47523c96bb97449d0588 (patch) | |
tree | 01100569d3c61cf497fa2da51a3288f60b2b1442 | |
parent | 2ebf530946354e39e3d3df8f96813a06f495f930 (diff) | |
parent | 23c65a817390d219bbe77f363cf14956c5c7119b (diff) | |
download | php-git-717730ddd103c08dd89a47523c96bb97449d0588.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fix #77638: var_export'ing certain class instances segfaults
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/standard/tests/general_functions/bug77638_1.phpt | 13 | ||||
-rw-r--r-- | ext/standard/tests/general_functions/bug77638_2.phpt | 13 | ||||
-rw-r--r-- | ext/standard/var.c | 4 |
4 files changed, 31 insertions, 2 deletions
@@ -23,6 +23,9 @@ PHP NEWS - PCRE: . Fixed bug #78853 (preg_match() may return integer > 1). (cmb) +- Standard: + . Fixed bug #77638 (var_export'ing certain class instances segfaults). (cmb) + 28 Nov 2019, PHP 7.4.0 - Core: diff --git a/ext/standard/tests/general_functions/bug77638_1.phpt b/ext/standard/tests/general_functions/bug77638_1.phpt new file mode 100644 index 0000000000..b5ad2b6acf --- /dev/null +++ b/ext/standard/tests/general_functions/bug77638_1.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #77638 (var_export'ing certain class instances segfaults) +--SKIPIF-- +<?php +if (!extension_loaded('com_dotnet')) die('skip com_dotnet extension not available'); +?> +--FILE-- +<?php +var_export(new COM("Scripting.Dictionary")); +?> +--EXPECT-- +com::__set_state(array( +)) diff --git a/ext/standard/tests/general_functions/bug77638_2.phpt b/ext/standard/tests/general_functions/bug77638_2.phpt new file mode 100644 index 0000000000..b0fbcf724f --- /dev/null +++ b/ext/standard/tests/general_functions/bug77638_2.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #77638 (var_export'ing certain class instances segfaults) +--SKIPIF-- +<?php +if (!extension_loaded('ffi')) die('skip ffi extension not available'); +?> +--FILE-- +<?php +var_export(FFI::new('int')); +?> +--EXPECT-- +FFI\CData::__set_state(array( +)) diff --git a/ext/standard/var.c b/ext/standard/var.c index 5ba2b3c8eb..c6e9bde9f2 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -557,7 +557,7 @@ again: zend_release_properties(myht); return; } else { - GC_PROTECT_RECURSION(myht); + GC_TRY_PROTECT_RECURSION(myht); } } if (level > 1) { @@ -577,7 +577,7 @@ again: ZEND_HASH_FOREACH_KEY_VAL_IND(myht, index, key, val) { php_object_element_export(val, index, key, level, buf); } ZEND_HASH_FOREACH_END(); - GC_UNPROTECT_RECURSION(myht); + GC_TRY_UNPROTECT_RECURSION(myht); zend_release_properties(myht); } if (level > 1) { |