File tree Expand file tree Collapse file tree 3 files changed +25
-1
lines changed Expand file tree Collapse file tree 3 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -71,6 +71,7 @@ PHP                                                                        NEWS
7171  . Fixed bug GH-16464 (Use-after-free in SplDoublyLinkedList::offsetSet()).
7272    (ilutov)
7373  . Fixed bug GH-16479 (Use-after-free in SplObjectStorage::setInfo()). (ilutov)
74+   . Fixed bug GH-16478 (Use-after-free in SplFixedArray::unset()). (ilutov)
7475
7576- Standard:
7677  . Fixed bug GH-16293 (Failed assertion when throwing in assert() callback with
Original file line number Diff line number Diff line change @@ -484,8 +484,10 @@ static void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_object *
484484		return ;
485485	} else  {
486486		intern -> array .should_rebuild_properties  =  true;
487- 		zval_ptr_dtor (& (intern -> array .elements [index ]));
487+ 		zval  garbage ;
488+ 		ZVAL_COPY_VALUE (& garbage , & intern -> array .elements [index ]);
488489		ZVAL_NULL (& intern -> array .elements [index ]);
490+ 		zval_ptr_dtor (& garbage );
489491	}
490492}
491493
Original file line number Diff line number Diff line change 1+ --TEST--
2+ GH-16478: Use-after-free in SplFixedArray::unset()
3+ --FILE--
4+ <?php 
5+ 
6+ class  C {
7+     function  __destruct () {
8+         global  $ arr
9+         $ arrsetSize (0 );
10+     }
11+ }
12+ 
13+ $ arrnew  SplFixedArray (2 );
14+ $ arr0 ] = new  C ;
15+ unset($ arr0 ]);
16+ var_dump ($ arr
17+ 
18+ ?> 
19+ --EXPECT--
20+ object(SplFixedArray)#1 (0) {
21+ }
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments