Merge branch 'PHP-8.3' into PHP-8.4

* PHP-8.3:
  Fix GH-18018: RC1 data returned from offsetGet causes UAF in ArrayObject
This commit is contained in:
Niels Dossche 2025-03-13 19:11:24 +01:00
commit d43d4684bd
No known key found for this signature in database
GPG key ID: B8A8AD166DF0E2E5
3 changed files with 28 additions and 2 deletions

4
NEWS
View file

@ -44,6 +44,10 @@ PHP NEWS
. Fixed bug GH-17984 (calls with arguments as array with references).
(David Carlier)
- SPL:
. Fixed bug GH-18018 (RC1 data returned from offsetGet causes UAF in
ArrayObject). (nielsdos)
- Treewide:
. Fixed bug GH-17736 (Assertion failure zend_reference_destroy()). (nielsdos)

View file

@ -665,12 +665,14 @@ static bool spl_array_has_dimension_ex(bool check_inherited, zend_object *object
}
}
/* empty() check the value is not falsy, isset() only check it is not null */
bool result = check_empty ? zend_is_true(value) : Z_TYPE_P(value) != IS_NULL;
if (value == &rv) {
zval_ptr_dtor(&rv);
}
/* empty() check the value is not falsy, isset() only check it is not null */
return check_empty ? zend_is_true(value) : Z_TYPE_P(value) != IS_NULL;
return result;
} /* }}} */
static int spl_array_has_dimension(zend_object *object, zval *offset, int check_empty) /* {{{ */

View file

@ -0,0 +1,20 @@
--TEST--
GH-18018 (RC1 data returned from offsetGet causes UAF in ArrayObject)
--FILE--
<?php
class Crap extends ArrayObject
{
public function offsetGet($offset): mixed
{
return [random_int(1,1)];
}
}
$values = ['qux' => 1];
$object = new Crap($values);
var_dump(empty($object['qux']));
?>
--EXPECT--
bool(false)