diff options
author | andrewnester <andrew.nester.dev@gmail.com> | 2017-01-22 18:59:59 +0300 |
---|---|---|
committer | Joe Watkins <krakjoe@php.net> | 2017-01-22 16:11:25 +0000 |
commit | 6f912f7c045ae723d01a24504bf0ae0711fd8a4f (patch) | |
tree | a8295b5d6d7070b7af786956e0c6dd58d149d294 | |
parent | 71efe9d8fd0b7486c2943d267c68dcefc6c406b1 (diff) | |
download | php-git-6f912f7c045ae723d01a24504bf0ae0711fd8a4f.tar.gz |
Fixed #73969 - Fixed segmentation fault when debug_print_backtrace called
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | Zend/zend_builtin_functions.c | 17 | ||||
-rw-r--r-- | tests/basic/bug73969.inc | 2 | ||||
-rw-r--r-- | tests/basic/bug73969.phpt | 30 |
4 files changed, 44 insertions, 6 deletions
@@ -7,6 +7,7 @@ PHP NEWS (Laruence) . Fixed bug #73876 (Crash when exporting **= in expansion of assign op). (Sara) + . Fixed bug #73969 (segfault in debug_print_backtrace). (andrewnester) - DTrace: . Fixed bug #73965 (DTrace reported as enabled when disabled). (Remi) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 1887c82676..8f77eb4f6d 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 0000000000..61b331769c --- /dev/null +++ b/tests/basic/bug73969.inc @@ -0,0 +1,2 @@ +<?php +debug_print_backtrace(); diff --git a/tests/basic/bug73969.phpt b/tests/basic/bug73969.phpt new file mode 100644 index 0000000000..11cfecd16b --- /dev/null +++ b/tests/basic/bug73969.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #73969: segfault on debug_print_backtrace with require() call +--FILE-- +<?php +trait c2 +{ + public static function f1() + { + + } +} + +class c1 +{ + use c2 + { + c2::f1 as f2; + } + + public static function go() + { + return require('bug73969.inc'); + } +} + +c1::go(); +?> +--EXPECTF-- +#0 require() called at [%s:19] +#1 c1::go() called at [%s:23] |