File tree Expand file tree Collapse file tree 1 file changed +12
-3
lines changed Expand file tree Collapse file tree 1 file changed +12
-3
lines changed Original file line number Diff line number Diff line change @@ -708,21 +708,30 @@ static bool zend_jit_class_may_be_modified(const zend_class_entry *ce, const zen
708708			return  0 ;
709709		}
710710		if  (ce -> info .user .filename  ==  called_from -> filename ) {
711- 			if  (ce -> parent  &&  zend_jit_class_may_be_modified (ce -> parent , called_from )) {
711+ 			if  (ce -> parent 
712+ 			 &&  (!(ce -> ce_flags  &  ZEND_ACC_LINKED )
713+ 			  ||  zend_jit_class_may_be_modified (ce -> parent , called_from ))) {
712714				return  1 ;
713715			}
714716			if  (ce -> num_interfaces ) {
717+ 				if  (!(ce -> ce_flags  &  ZEND_ACC_LINKED )) {
718+ 					return  1 ;
719+ 				}
715720				for  (i  =  0 ; i  <  ce -> num_interfaces ; i ++ ) {
716721					if  (zend_jit_class_may_be_modified (ce -> interfaces [i ], called_from )) {
717722						return  1 ;
718723					}
719724				}
720725			}
721726			if  (ce -> num_traits ) {
727+ 				if  (!(ce -> ce_flags  &  ZEND_ACC_LINKED )) {
728+ 					return  1 ;
729+ 				}
722730				for  (i = 0 ; i  <  ce -> num_traits ; i ++ ) {
723731					zend_class_entry  * trait  =  zend_fetch_class_by_name (ce -> trait_names [i ].name ,
724- 						ce -> trait_names [i ].lc_name , ZEND_FETCH_CLASS_TRAIT );
725- 					if  (zend_jit_class_may_be_modified (trait , called_from )) {
732+ 						ce -> trait_names [i ].lc_name ,
733+ 						ZEND_FETCH_CLASS_TRAIT  | ZEND_FETCH_CLASS_NO_AUTOLOAD  | ZEND_FETCH_CLASS_SILENT );
734+ 					if  (!trait  ||  zend_jit_class_may_be_modified (trait , called_from )) {
726735						return  1 ;
727736					}
728737				}
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments