From 542a981d12ad6a5fe193de9c3c7c480f4b5a284a Mon Sep 17 00:00:00 2001 From: andrewnester Date: Sun, 22 Jan 2017 18:59:59 +0300 Subject: [PATCH] Fixed #73969 - Fixed segmentation fault when debug_print_backtrace called --- Zend/zend_builtin_functions.c | 17 +++++++++++------ tests/basic/bug73969.inc | 2 ++ tests/basic/bug73969.phpt | 30 ++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 tests/basic/bug73969.inc create mode 100644 tests/basic/bug73969.phpt diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 1887c82676da0..8f77eb4f6d10c 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -2365,12 +2365,17 @@ ZEND_FUNCTION(debug_print_backtrace) if (call->func) { func = call->func; - function_name = (func->common.scope && - func->common.scope->trait_aliases) ? - ZSTR_VAL(zend_resolve_method_name( - (object ? object->ce : func->common.scope), func)) : - (func->common.function_name ? - ZSTR_VAL(func->common.function_name) : NULL); + zend_string *zend_function_name; + if (func->common.scope && func->common.scope->trait_aliases) { + zend_function_name = zend_resolve_method_name(object ? object->ce : func->common.scope, func); + } else { + zend_function_name = func->common.function_name; + } + if (zend_function_name != NULL) { + function_name = ZSTR_VAL(zend_function_name); + } else { + function_name = NULL; + } } else { func = NULL; function_name = NULL; diff --git a/tests/basic/bug73969.inc b/tests/basic/bug73969.inc new file mode 100644 index 0000000000000..61b331769c58a --- /dev/null +++ b/tests/basic/bug73969.inc @@ -0,0 +1,2 @@ + +--EXPECTF-- +#0 require() called at [%s:19] +#1 c1::go() called at [%s:23]