diff --git a/NEWS b/NEWS index 14d1cfb1b82..fb3127f1e6e 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.2.12 +- Core: + . Fixed bug GH-12207 (memory leak when class using trait with doc block). + (rioderelfte) + - Filter: . Fix explicit FILTER_REQUIRE_SCALAR with FILTER_CALLBACK (ilutov) diff --git a/Zend/tests/traits/bugs/overridding-static-property-with-doc-block.phpt b/Zend/tests/traits/bugs/overridding-static-property-with-doc-block.phpt new file mode 100644 index 00000000000..51c733d6625 --- /dev/null +++ b/Zend/tests/traits/bugs/overridding-static-property-with-doc-block.phpt @@ -0,0 +1,21 @@ +--TEST-- +Overriding a static property where both declarations have a doc block does not leak memory +--FILE-- + +--EXPECT-- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index feb9744eb12..4f0bae3f257 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -4199,6 +4199,9 @@ ZEND_API zend_property_info *zend_declare_typed_property(zend_class_entry *ce, z (property_info_ptr->flags & ZEND_ACC_STATIC) != 0) { property_info->offset = property_info_ptr->offset; zval_ptr_dtor(&ce->default_static_members_table[property_info->offset]); + if (property_info_ptr->doc_comment) { + zend_string_release(property_info_ptr->doc_comment); + } zend_hash_del(&ce->properties_info, name); } else { property_info->offset = ce->default_static_members_count++; @@ -4217,6 +4220,9 @@ ZEND_API zend_property_info *zend_declare_typed_property(zend_class_entry *ce, z (property_info_ptr->flags & ZEND_ACC_STATIC) == 0) { property_info->offset = property_info_ptr->offset; zval_ptr_dtor(&ce->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)]); + if (property_info_ptr->doc_comment) { + zend_string_release_ex(property_info_ptr->doc_comment, 1); + } zend_hash_del(&ce->properties_info, name); ZEND_ASSERT(ce->type == ZEND_INTERNAL_CLASS);