File tree 3 files changed +25
-1
lines changed
3 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -71,6 +71,7 @@ PHP NEWS
71
71
. Fixed bug GH-16464 (Use-after-free in SplDoublyLinkedList::offsetSet()).
72
72
(ilutov)
73
73
. Fixed bug GH-16479 (Use-after-free in SplObjectStorage::setInfo()). (ilutov)
74
+ . Fixed bug GH-16478 (Use-after-free in SplFixedArray::unset()). (ilutov)
74
75
75
76
- Standard:
76
77
. 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 *
484
484
return ;
485
485
} else {
486
486
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 ]);
488
489
ZVAL_NULL (& intern -> array .elements [index ]);
490
+ zval_ptr_dtor (& garbage );
489
491
}
490
492
}
491
493
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
+ $ arr ->setSize (0 );
10
+ }
11
+ }
12
+
13
+ $ arr = new SplFixedArray (2 );
14
+ $ arr [0 ] = new C ;
15
+ unset($ arr [0 ]);
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