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..f19005179ac26
--- /dev/null
+++ b/ext/zend_test/tests/observer_fiber_backtrace_crash.phpt
@@ -0,0 +1,48 @@
+--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
+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--
+
+
+