diff --git a/Zend/tests/bug_debug_backtrace_replace_zend_execute_ex.phpt b/Zend/tests/bug_debug_backtrace_replace_zend_execute_ex.phpt new file mode 100644 index 00000000000..450e5e3d5d2 --- /dev/null +++ b/Zend/tests/bug_debug_backtrace_replace_zend_execute_ex.phpt @@ -0,0 +1,30 @@ +--TEST-- +bug_debug_backtrace.phpt with replaced zend_execute_ex +--EXTENSIONS-- +zend_test +--INI-- +zend_test.replace_zend_execute_ex=1 +--FILE-- + +--EXPECTF-- +#0 %s(%d): boo() +#1 %s(%d): bar() +#2 %s(%d) : eval()'d code(1): foo() +#3 %s(%d): eval() +Done diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index ea1d0845394..0ba28b2a3a6 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1820,7 +1820,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp); skip_frame: - if (UNEXPECTED((ZEND_CALL_INFO(call) & ZEND_CALL_TOP_FUNCTION) != 0) + if (UNEXPECTED(ZEND_CALL_KIND(call) == ZEND_CALL_TOP_FUNCTION) && !fake_frame && prev && prev->func