summaryrefslogtreecommitdiff
path: root/Zend/zend_objects.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-03-07 00:50:02 +0400
committerDmitry Stogov <dmitry@zend.com>2014-03-07 00:50:02 +0400
commitb146ed16073a5679bccb58a59fe9e605b3ef866a (patch)
treef748b51a0517453a39a185f5defb058c001ee3c1 /Zend/zend_objects.c
parent70260d133ec37b66d62296b1cd95551b8ad31990 (diff)
downloadphp-git-b146ed16073a5679bccb58a59fe9e605b3ef866a.tar.gz
Fixed dynamic properties cloning
Diffstat (limited to 'Zend/zend_objects.c')
-rw-r--r--Zend/zend_objects.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index 6ac237a5ea..27c9f6c5f6 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -141,11 +141,12 @@ ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object *o
{
int i;
- for (i = 0; i < old_object->ce->default_properties_count; i++) {
- zval_ptr_dtor(&new_object->properties_table[i]);
- ZVAL_COPY(&new_object->properties_table[i], &old_object->properties_table[i]);
- }
- if (old_object->properties) {
+ if (!old_object->properties) {
+ for (i = 0; i < old_object->ce->default_properties_count; i++) {
+ zval_ptr_dtor(&new_object->properties_table[i]);
+ ZVAL_COPY(&new_object->properties_table[i], &old_object->properties_table[i]);
+ }
+ } else {
if (!new_object->properties) {
ALLOC_HASHTABLE(new_object->properties);
zend_hash_init(new_object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
@@ -160,8 +161,8 @@ ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object *o
(prop_info = zend_hash_get_current_data_ptr_ex(&old_object->ce->properties_info, &pos)) != NULL;
zend_hash_move_forward_ex(&old_object->ce->properties_info, &pos)) {
if ((prop_info->flags & ZEND_ACC_STATIC) == 0) {
- if ((prop = zend_hash_find_ptr(new_object->properties, prop_info->name)) != NULL) {
- ZVAL_COPY(&new_object->properties_table[prop_info->offset], prop);
+ if ((prop = zend_hash_find(new_object->properties, prop_info->name)) != NULL) {
+ ZVAL_INDIRECT(&new_object->properties_table[prop_info->offset], prop);
} else {
ZVAL_UNDEF(&new_object->properties_table[prop_info->offset]);
}