From 22130a2b74ccd964c868a107e89b05d06e48d99d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 20 Oct 2005 08:15:13 +0000 Subject: [PATCH] Fixed bug #34767 (Zend Engine 1 Compatibility not copying objects correctly) --- Zend/tests/bug34767.phpt | 33 +++++++++++++++++++++++++++++++++ Zend/zend_execute_API.c | 7 +++++++ 2 files changed, 40 insertions(+) create mode 100755 Zend/tests/bug34767.phpt diff --git a/Zend/tests/bug34767.phpt b/Zend/tests/bug34767.phpt new file mode 100755 index 0000000000..45af9f944c --- /dev/null +++ b/Zend/tests/bug34767.phpt @@ -0,0 +1,33 @@ +--TEST-- +Bug #34767 (Zend Engine 1 Compatibility not copying objects correctly) +--INI-- +zend.ze1_compatibility_mode=1 +error_reporting=4095 +--FILE-- +y = &new stdClass(); +print_r($a); +$b = $a; +$a->y->z = 1; +print_r($b); +?> +--EXPECTF-- + +Strict Standards: Assigning the return value of new by reference is deprecated in %sbug34767.php on line 2 +stdClass Object +( + [y] => stdClass Object + ( + ) + +) + +Strict Standards: Implicit cloning object of class 'stdClass' because of 'zend.ze1_compatibility_mode' in %sbug34767.php on line 4 +stdClass Object +( + [y] => stdClass Object + ( + [z] => 1 + ) + +) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 99bf1c2d1b..6273df031f 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -396,6 +396,13 @@ ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC) zval_dtor(*zval_ptr); safe_free_zval_ptr_rel(*zval_ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC); } else if ((*zval_ptr)->refcount == 1) { + if ((*zval_ptr)->type == IS_OBJECT) { + TSRMLS_FETCH(); + + if (EG(ze1_compatibility_mode)) { + return; + } + } (*zval_ptr)->is_ref = 0; } } -- 2.50.1