Skip to content

Commit 9db5b32

Browse files
committed
zend_objects: Unlock readonly properties after __clone() for clone-with
1 parent 718d5e5 commit 9db5b32

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

Zend/zend_objects.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,14 @@ ZEND_API void ZEND_FASTCALL zend_objects_clone_members_ex(zend_object *new_objec
294294
}
295295

296296
if (EXPECTED(!EG(exception)) && zend_hash_num_elements(properties) > 0) {
297+
/* Unlock readonly properties once more. */
298+
if (ZEND_CLASS_HAS_READONLY_PROPS(new_object->ce) && old_object->ce->clone) {
299+
for (uint32_t i = 0; i < new_object->ce->default_properties_count; i++) {
300+
zval* prop = OBJ_PROP_NUM(new_object, i);
301+
Z_PROP_FLAG_P(prop) |= IS_PROP_REINITABLE;
302+
}
303+
}
304+
297305
zend_class_entry *old_scope = EG(fake_scope);
298306

299307
EG(fake_scope) = scope;

0 commit comments

Comments
 (0)