Merge branch 'PHP-8.4'

* PHP-8.4:
  Fix GH-16414: zend_test.observer.observe_function_names may segfault
This commit is contained in:
Christoph M. Becker 2024-10-20 12:11:42 +02:00
commit 01aeaf2e95
No known key found for this signature in database
GPG key ID: D66C9593118BCCB6
2 changed files with 18 additions and 2 deletions

View file

@ -304,9 +304,12 @@ static ZEND_INI_MH(zend_test_observer_OnUpdateCommaList)
zend_array **p = (zend_array **) ZEND_INI_GET_ADDR();
zend_string *funcname;
zend_function *func;
if (!ZT_G(observer_enabled)) {
return FAILURE;
}
if (stage != PHP_INI_STAGE_STARTUP && stage != PHP_INI_STAGE_ACTIVATE && stage != PHP_INI_STAGE_DEACTIVATE && stage != PHP_INI_STAGE_SHUTDOWN) {
ZEND_HASH_FOREACH_STR_KEY(*p, funcname) {
if ((func = zend_hash_find_ptr(EG(function_table), funcname))) {
if ((func = zend_hash_find_ptr(EG(function_table), funcname)) && ZEND_OBSERVER_DATA(func) != NULL) {
void *old_handler;
zend_observer_remove_begin_handler(func, observer_begin, (zend_observer_fcall_begin_handler *)&old_handler);
zend_observer_remove_end_handler(func, observer_end, (zend_observer_fcall_end_handler *)&old_handler);
@ -329,7 +332,7 @@ static ZEND_INI_MH(zend_test_observer_OnUpdateCommaList)
zend_string_release(str);
if (stage != PHP_INI_STAGE_STARTUP && stage != PHP_INI_STAGE_ACTIVATE && stage != PHP_INI_STAGE_DEACTIVATE && stage != PHP_INI_STAGE_SHUTDOWN) {
ZEND_HASH_FOREACH_STR_KEY(*p, funcname) {
if ((func = zend_hash_find_ptr(EG(function_table), funcname))) {
if ((func = zend_hash_find_ptr(EG(function_table), funcname)) && ZEND_OBSERVER_DATA(func) != NULL) {
zend_observer_add_begin_handler(func, observer_begin);
zend_observer_add_end_handler(func, observer_end);
}

View file

@ -0,0 +1,13 @@
--TEST--
GH-16414 (zend_test.observer.observe_function_names may segfault)
--EXTENSIONS--
zend_test
--INI--
zend_test.observer.enabled=0
--FILE--
<?php
function bar() {}
var_dump(ini_set("zend_test.observer.observe_function_names", "bar"));
?>
--EXPECT--
bool(false)