@@ -2176,7 +2176,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
21762176}
21772177/* }}} */
21782178
2179- static void zend_do_implement_interfaces (zend_class_entry * ce , zend_class_entry * * interfaces ) /* {{{ */
2179+ static void zend_do_implement_interfaces (zend_class_entry * ce , zend_class_entry * * interfaces , size_t num_interface_names ) /* {{{ */
21802180{
21812181 zend_class_entry * iface ;
21822182 uint32_t num_parent_interfaces = ce -> parent ? ce -> parent -> num_interfaces : 0 ;
@@ -2220,6 +2220,14 @@ static void zend_do_implement_interfaces(zend_class_entry *ce, zend_class_entry
22202220 }
22212221 }
22222222
2223+ if (!(ce -> ce_flags & ZEND_ACC_CACHED )) {
2224+ for (i = 0 ; i < num_interface_names ; i ++ ) {
2225+ zend_string_release_ex (ce -> interface_names [i ].name , 0 );
2226+ zend_string_release_ex (ce -> interface_names [i ].lc_name , 0 );
2227+ }
2228+ efree (ce -> interface_names );
2229+ }
2230+
22232231 ce -> num_interfaces = num_interfaces ;
22242232 ce -> interfaces = interfaces ;
22252233 ce -> ce_flags |= ZEND_ACC_RESOLVED_INTERFACES ;
@@ -3575,14 +3583,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string
35753583 Z_CE_P (zv ) = ce ;
35763584 }
35773585
3578- if (!(ce -> ce_flags & ZEND_ACC_CACHED )) {
3579- for (i = 0 ; i < ce -> num_interfaces ; i ++ ) {
3580- zend_string_release_ex (ce -> interface_names [i ].name , 0 );
3581- zend_string_release_ex (ce -> interface_names [i ].lc_name , 0 );
3582- }
3583- efree (ce -> interface_names );
3584- }
3585-
3586+ size_t num_interface_names = ce -> num_interfaces ;
35863587 ce -> num_interfaces = num_implementable_interfaces ;
35873588
35883589 if (CG (unlinked_uses )) {
@@ -3624,7 +3625,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string
36243625 memcpy (interfaces + num_parent_interfaces , traits_and_interfaces + ce -> num_traits ,
36253626 sizeof (zend_class_entry * ) * ce -> num_interfaces );
36263627
3627- zend_do_implement_interfaces (ce , interfaces );
3628+ zend_do_implement_interfaces (ce , interfaces , num_interface_names );
36283629 } else if (parent && parent -> num_interfaces ) {
36293630 zend_do_inherit_interfaces (ce , parent );
36303631 }
0 commit comments