summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-06-19 16:35:12 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-06-19 16:35:12 +0200
commit268b5fec8e42e82dce398b86a4970ad8875978d3 (patch)
treeb7ed8a105a5570e170a56d78d5aad1fb251bba55 /Zend
parentb8cba88904a509abd2c141ebcdb952cfd9471063 (diff)
downloadphp-git-268b5fec8e42e82dce398b86a4970ad8875978d3.tar.gz
Fixed bug #78182
Diffstat (limited to 'Zend')
-rw-r--r--Zend/tests/bug78182.phpt15
-rw-r--r--Zend/zend_execute.c1
2 files changed, 16 insertions, 0 deletions
diff --git a/Zend/tests/bug78182.phpt b/Zend/tests/bug78182.phpt
new file mode 100644
index 0000000000..4b0f08dc3b
--- /dev/null
+++ b/Zend/tests/bug78182.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #78182: Segmentation fault during by-reference property assignment
+--FILE--
+<?php
+$varName = 'var';
+$propName = 'prop';
+$$varName->$propName =& $$varName;
+var_dump($var);
+?>
+--EXPECTF--
+Warning: Creating default object from empty value in %s on line %d
+object(stdClass)#1 (1) {
+ ["prop"]=>
+ *RECURSION*
+}
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index faa677e44d..5588ada56a 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -2826,6 +2826,7 @@ static zend_always_inline void zend_assign_to_property_reference(zval *container
if (prop_op_type == IS_CONST) {
prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
} else {
+ ZVAL_DEREF(container);
prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
}