summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandrewnester <andrew.nester.dev@gmail.com>2017-01-22 18:59:59 +0300
committerJoe Watkins <krakjoe@php.net>2017-01-22 16:11:25 +0000
commit6f912f7c045ae723d01a24504bf0ae0711fd8a4f (patch)
treea8295b5d6d7070b7af786956e0c6dd58d149d294
parent71efe9d8fd0b7486c2943d267c68dcefc6c406b1 (diff)
downloadphp-git-6f912f7c045ae723d01a24504bf0ae0711fd8a4f.tar.gz
Fixed #73969 - Fixed segmentation fault when debug_print_backtrace called
-rw-r--r--NEWS1
-rw-r--r--Zend/zend_builtin_functions.c17
-rw-r--r--tests/basic/bug73969.inc2
-rw-r--r--tests/basic/bug73969.phpt30
4 files changed, 44 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index d96e7bec90..ac14eebb00 100644
--- a/NEWS
+++ b/NEWS
@@ -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]