summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-10-25 16:32:14 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-10-25 16:32:14 +0200
commite63a44dd03aae264561fff77565f4a5f9be035bd (patch)
tree1eff71e9122371f78f5129cf833f7c242bc1810d /Zend/zend_API.c
parent7d056fc6c0d06ce1f84c5bc0c310f04b43c5de14 (diff)
parentf1848a4b3f807d21415c5a334b461d240b2a83af (diff)
downloadphp-git-e63a44dd03aae264561fff77565f4a5f9be035bd.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix bug #78226: Don't call __set() on uninitialized typed properties
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 9bc6b12cd6..679c656409 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -1119,13 +1119,13 @@ static zend_always_inline void _object_properties_init(zend_object *object, zend
if (UNEXPECTED(class_type->type == ZEND_INTERNAL_CLASS)) {
do {
- ZVAL_COPY_OR_DUP(dst, src);
+ ZVAL_COPY_OR_DUP_PROP(dst, src);
src++;
dst++;
} while (src != end);
} else {
do {
- ZVAL_COPY(dst, src);
+ ZVAL_COPY_PROP(dst, src);
src++;
dst++;
} while (src != end);
@@ -3539,6 +3539,7 @@ ZEND_API int zend_declare_typed_property(zend_class_entry *ce, zend_string *name
}
}
} else {
+ zval *property_default_ptr;
if ((property_info_ptr = zend_hash_find_ptr(&ce->properties_info, name)) != NULL &&
(property_info_ptr->flags & ZEND_ACC_STATIC) == 0) {
property_info->offset = property_info_ptr->offset;
@@ -3559,7 +3560,9 @@ ZEND_API int zend_declare_typed_property(zend_class_entry *ce, zend_string *name
ce->properties_info_table[ce->default_properties_count - 1] = property_info;
}
}
- ZVAL_COPY_VALUE(&ce->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)], property);
+ property_default_ptr = &ce->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)];
+ ZVAL_COPY_VALUE(property_default_ptr, property);
+ Z_PROP_FLAG_P(property_default_ptr) = Z_ISUNDEF_P(property) ? IS_PROP_UNINIT : 0;
}
if (ce->type & ZEND_INTERNAL_CLASS) {
switch(Z_TYPE_P(property)) {