@@ -2188,7 +2188,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
21882188}
21892189/* }}} */
21902190
2191- static void zend_do_implement_interfaces (zend_class_entry * ce , zend_class_entry * * interfaces ) /* {{{ */
2191+ static void zend_do_implement_interfaces (zend_class_entry * ce , zend_class_entry * * interfaces , size_t num_interface_names ) /* {{{ */
21922192{
21932193 zend_class_entry * iface ;
21942194 uint32_t num_parent_interfaces = ce -> parent ? ce -> parent -> num_interfaces : 0 ;
@@ -2232,6 +2232,14 @@ static void zend_do_implement_interfaces(zend_class_entry *ce, zend_class_entry
22322232 }
22332233 }
22342234
2235+ if (!(ce -> ce_flags & ZEND_ACC_CACHED )) {
2236+ for (i = 0 ; i < num_interface_names ; i ++ ) {
2237+ zend_string_release_ex (ce -> interface_names [i ].name , 0 );
2238+ zend_string_release_ex (ce -> interface_names [i ].lc_name , 0 );
2239+ }
2240+ efree (ce -> interface_names );
2241+ }
2242+
22352243 ce -> num_interfaces = num_interfaces ;
22362244 ce -> interfaces = interfaces ;
22372245 ce -> ce_flags |= ZEND_ACC_RESOLVED_INTERFACES ;
@@ -3589,14 +3597,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string
35893597 Z_CE_P (zv ) = ce ;
35903598 }
35913599
3592- if (!(ce -> ce_flags & ZEND_ACC_CACHED )) {
3593- for (i = 0 ; i < ce -> num_interfaces ; i ++ ) {
3594- zend_string_release_ex (ce -> interface_names [i ].name , 0 );
3595- zend_string_release_ex (ce -> interface_names [i ].lc_name , 0 );
3596- }
3597- efree (ce -> interface_names );
3598- }
3599-
3600+ size_t num_interface_names = ce -> num_interfaces ;
36003601 ce -> num_interfaces = num_implementable_interfaces ;
36013602
36023603 if (CG (unlinked_uses )) {
@@ -3638,7 +3639,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string
36383639 memcpy (interfaces + num_parent_interfaces , traits_and_interfaces + ce -> num_traits ,
36393640 sizeof (zend_class_entry * ) * ce -> num_interfaces );
36403641
3641- zend_do_implement_interfaces (ce , interfaces );
3642+ zend_do_implement_interfaces (ce , interfaces , num_interface_names );
36423643 } else if (parent && parent -> num_interfaces ) {
36433644 zend_do_inherit_interfaces (ce , parent );
36443645 }
0 commit comments