Skip to content

Commit 01aeaf2

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16414: zend_test.observer.observe_function_names may segfault
2 parents ae71779 + 909cecb commit 01aeaf2

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

ext/zend_test/observer.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,12 @@ static ZEND_INI_MH(zend_test_observer_OnUpdateCommaList)
304304
zend_array **p = (zend_array **) ZEND_INI_GET_ADDR();
305305
zend_string *funcname;
306306
zend_function *func;
307+
if (!ZT_G(observer_enabled)) {
308+
return FAILURE;
309+
}
307310
if (stage != PHP_INI_STAGE_STARTUP && stage != PHP_INI_STAGE_ACTIVATE && stage != PHP_INI_STAGE_DEACTIVATE && stage != PHP_INI_STAGE_SHUTDOWN) {
308311
ZEND_HASH_FOREACH_STR_KEY(*p, funcname) {
309-
if ((func = zend_hash_find_ptr(EG(function_table), funcname))) {
312+
if ((func = zend_hash_find_ptr(EG(function_table), funcname)) && ZEND_OBSERVER_DATA(func) != NULL) {
310313
void *old_handler;
311314
zend_observer_remove_begin_handler(func, observer_begin, (zend_observer_fcall_begin_handler *)&old_handler);
312315
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)
329332
zend_string_release(str);
330333
if (stage != PHP_INI_STAGE_STARTUP && stage != PHP_INI_STAGE_ACTIVATE && stage != PHP_INI_STAGE_DEACTIVATE && stage != PHP_INI_STAGE_SHUTDOWN) {
331334
ZEND_HASH_FOREACH_STR_KEY(*p, funcname) {
332-
if ((func = zend_hash_find_ptr(EG(function_table), funcname))) {
335+
if ((func = zend_hash_find_ptr(EG(function_table), funcname)) && ZEND_OBSERVER_DATA(func) != NULL) {
333336
zend_observer_add_begin_handler(func, observer_begin);
334337
zend_observer_add_end_handler(func, observer_end);
335338
}

ext/zend_test/tests/gh16414.phpt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
GH-16414 (zend_test.observer.observe_function_names may segfault)
3+
--EXTENSIONS--
4+
zend_test
5+
--INI--
6+
zend_test.observer.enabled=0
7+
--FILE--
8+
<?php
9+
function bar() {}
10+
var_dump(ini_set("zend_test.observer.observe_function_names", "bar"));
11+
?>
12+
--EXPECT--
13+
bool(false)

0 commit comments

Comments
 (0)