From 2551208b0f8c45bba3d456098b9fd6442f2d0508 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Tue, 8 Oct 2024 14:57:39 +0200 Subject: [PATCH] Fix segfault in zend_test_execute_internal() zend_pass_function also has no name, so we might also be referring to an internal function here. In this case, ZEND_NEW uses the zend_pass_function when there is no constructor. Fixes GH-16294 --- ext/zend_test/observer.c | 2 +- ext/zend_test/tests/gh16294.phpt | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 ext/zend_test/tests/gh16294.phpt diff --git a/ext/zend_test/observer.c b/ext/zend_test/observer.c index af45f91a5da5b..658498675603c 100644 --- a/ext/zend_test/observer.c +++ b/ext/zend_test/observer.c @@ -288,7 +288,7 @@ static void zend_test_execute_internal(zend_execute_data *execute_data, zval *re } else { php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.function_name)); } - } else { + } else if (ZEND_USER_CODE(fbc->type)) { php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->op_array.filename)); } diff --git a/ext/zend_test/tests/gh16294.phpt b/ext/zend_test/tests/gh16294.phpt new file mode 100644 index 0000000000000..1a85586d1def0 --- /dev/null +++ b/ext/zend_test/tests/gh16294.phpt @@ -0,0 +1,16 @@ +--TEST-- +GH-16294: Segfault in test observer on zend_pass_function +--EXTENSIONS-- +zend_test +--INI-- +zend_test.observer.execute_internal=1 +--FILE-- + +===DONE=== +--EXPECT-- +===DONE===