From 3abef9c9609eef04f268e1fd002e6ca7edac11fa Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 2 May 2017 22:16:41 +0200 Subject: Don't double initialize object properties --- Zend/zend_objects.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'Zend/zend_objects.c') diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 9b5a2c74fd..900ec1db5b 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -36,17 +36,9 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce) object->ce = ce; object->properties = NULL; zend_objects_store_put(object); - p = object->properties_table; - if (EXPECTED(ce->default_properties_count != 0)) { - end = p + ce->default_properties_count; - do { - ZVAL_UNDEF(p); - p++; - } while (p != end); - } if (UNEXPECTED(ce->ce_flags & ZEND_ACC_USE_GUARDS)) { GC_FLAGS(object) |= IS_OBJ_USE_GUARDS; - ZVAL_UNDEF(p); + ZVAL_UNDEF(object->properties_table + object->ce->default_properties_count); } } @@ -252,6 +244,16 @@ ZEND_API zend_object *zend_objects_clone_obj(zval *zobject) old_object = Z_OBJ_P(zobject); new_object = zend_objects_new(old_object->ce); + /* zend_objects_clone_members() expect the properties to be initialized. */ + if (new_object->ce->default_properties_count) { + zval *p = new_object->properties_table; + zval *end = p + new_object->ce->default_properties_count; + do { + ZVAL_UNDEF(p); + p++; + } while (p != end); + } + zend_objects_clone_members(new_object, old_object); return new_object; -- cgit v1.2.1