mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16414: zend_test.observer.observe_function_names may segfault
This commit is contained in:
commit
01aeaf2e95
2 changed files with 18 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
|
|
13
ext/zend_test/tests/gh16414.phpt
Normal file
13
ext/zend_test/tests/gh16414.phpt
Normal 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)
|
Loading…
Add table
Add a link
Reference in a new issue