From 4b723435ab1b8118308bc2e5774c624955d0216b Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Fri, 26 Sep 2025 16:38:04 +0200 Subject: [PATCH 1/2] Fix GH-16319: protect fiber backtrace with null filename from crashing --- NEWS | 2 ++ ext/zend_test/observer.c | 4 +-- .../tests/observer_fiber_backtrace_crash.phpt | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 ext/zend_test/tests/observer_fiber_backtrace_crash.phpt diff --git a/NEWS b/NEWS index fc3c0662b9328..b0908122ec341 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,8 @@ PHP NEWS array). (ilutov) . Fixed bug GH-19480 (error_log php.ini cannot be unset when open_basedir is configured). (nielsdos) + . Fixed bug GH-16319 (Prevent crash when displaying fiber backtrace with + a null filename). (alexandre-daubois) - Date: . Fixed GH-17159: "P" format for ::createFromFormat swallows string literals. diff --git a/ext/zend_test/observer.c b/ext/zend_test/observer.c index 9d0fb27c8a559..bff1d6ff93424 100644 --- a/ext/zend_test/observer.c +++ b/ext/zend_test/observer.c @@ -155,7 +155,7 @@ static void observer_show_init(zend_function *fbc) php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.function_name)); } } else { - php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->op_array.filename)); + php_printf("%*s\n", 2 * ZT_G(observer_nesting_depth), "", fbc->op_array.filename ? ZSTR_VAL(fbc->op_array.filename) : "[no active file]"); } } @@ -178,7 +178,7 @@ static void observer_show_init_backtrace(zend_execute_data *execute_data) php_printf("%*s%s()\n", indent, "", ZSTR_VAL(fbc->common.function_name)); } } else { - php_printf("%*s{main} %s\n", indent, "", ZSTR_VAL(fbc->op_array.filename)); + php_printf("%*s{main} %s\n", indent, "", fbc->op_array.filename ? ZSTR_VAL(fbc->op_array.filename) : "[no active file]"); } } while ((ex = ex->prev_execute_data) != NULL); php_printf("%*s-->\n", 2 * ZT_G(observer_nesting_depth), ""); diff --git a/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt b/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt new file mode 100644 index 0000000000000..ae913b9e6819c --- /dev/null +++ b/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt @@ -0,0 +1,36 @@ +--TEST-- +GH-16319 (Fiber backtrace with null filename should not crash) +--EXTENSIONS-- +zend_test +--INI-- +zend_test.observer.enabled=1 +zend_test.observer.show_init_backtrace=1 +--FILE-- +start(); +echo "Test completed without crash\n"; +?> +--EXPECTF-- + + + + + + + + +Test completed without crash From 75f041bbfb2a7fcbbfbed949c968c57d261a965e Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Mon, 29 Sep 2025 12:53:24 +0200 Subject: [PATCH 2/2] skip if jit is enabled --- NEWS | 2 - .../tests/observer_fiber_backtrace_crash.phpt | 48 ++++++++++++------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index b0908122ec341..fc3c0662b9328 100644 --- a/NEWS +++ b/NEWS @@ -14,8 +14,6 @@ PHP NEWS array). (ilutov) . Fixed bug GH-19480 (error_log php.ini cannot be unset when open_basedir is configured). (nielsdos) - . Fixed bug GH-16319 (Prevent crash when displaying fiber backtrace with - a null filename). (alexandre-daubois) - Date: . Fixed GH-17159: "P" format for ::createFromFormat swallows string literals. diff --git a/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt b/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt index ae913b9e6819c..f19005179ac26 100644 --- a/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt +++ b/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt @@ -5,6 +5,10 @@ zend_test --INI-- zend_test.observer.enabled=1 zend_test.observer.show_init_backtrace=1 +zend_test.observer.show_output=1 +zend_test.observer.observe_all=1 +zend_test.observer.show_opcode=0 +opcache.jit=0 --FILE-- start(); echo "Test completed without crash\n"; ?> --EXPECTF-- - + - - - - - - + + + + + + + + + + + <{closure}> + + Test completed without crash +