1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Fix uaf in SplFixedArray::unset()

Fixes GH-16478
Closes GH-16481
This commit is contained in:
Ilija Tovilo
2024-10-17 16:06:05 +02:00
parent 12c987fae2
commit 7fe168d855
3 changed files with 25 additions and 1 deletions

1
NEWS
View File

@@ -71,6 +71,7 @@ PHP NEWS
. Fixed bug GH-16464 (Use-after-free in SplDoublyLinkedList::offsetSet()).
(ilutov)
. Fixed bug GH-16479 (Use-after-free in SplObjectStorage::setInfo()). (ilutov)
. Fixed bug GH-16478 (Use-after-free in SplFixedArray::unset()). (ilutov)
- Standard:
. Fixed bug GH-16293 (Failed assertion when throwing in assert() callback with

View File

@@ -484,8 +484,10 @@ static void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_object *
return;
} else {
intern->array.should_rebuild_properties = true;
zval_ptr_dtor(&(intern->array.elements[index]));
zval garbage;
ZVAL_COPY_VALUE(&garbage, &intern->array.elements[index]);
ZVAL_NULL(&intern->array.elements[index]);
zval_ptr_dtor(&garbage);
}
}

View File

@@ -0,0 +1,21 @@
--TEST--
GH-16478: Use-after-free in SplFixedArray::unset()
--FILE--
<?php
class C {
function __destruct() {
global $arr;
$arr->setSize(0);
}
}
$arr = new SplFixedArray(2);
$arr[0] = new C;
unset($arr[0]);
var_dump($arr);
?>
--EXPECT--
object(SplFixedArray)#1 (0) {
}