@@ -2188,7 +2188,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
2188
2188
}
2189
2189
/* }}} */
2190
2190
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 ) /* {{{ */
2192
2192
{
2193
2193
zend_class_entry * iface ;
2194
2194
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
2232
2232
}
2233
2233
}
2234
2234
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
+
2235
2243
ce -> num_interfaces = num_interfaces ;
2236
2244
ce -> interfaces = interfaces ;
2237
2245
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
3589
3597
Z_CE_P (zv ) = ce ;
3590
3598
}
3591
3599
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 ;
3600
3601
ce -> num_interfaces = num_implementable_interfaces ;
3601
3602
3602
3603
if (CG (unlinked_uses )) {
@@ -3638,7 +3639,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string
3638
3639
memcpy (interfaces + num_parent_interfaces , traits_and_interfaces + ce -> num_traits ,
3639
3640
sizeof (zend_class_entry * ) * ce -> num_interfaces );
3640
3641
3641
- zend_do_implement_interfaces (ce , interfaces );
3642
+ zend_do_implement_interfaces (ce , interfaces , num_interface_names );
3642
3643
} else if (parent && parent -> num_interfaces ) {
3643
3644
zend_do_inherit_interfaces (ce , parent );
3644
3645
}
0 commit comments