summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2006-11-15 16:05:11 +0000
committerDmitry Stogov <dmitry@php.net>2006-11-15 16:05:11 +0000
commit842b1b5a4718b0806b2127f6423f994a06beee03 (patch)
treed30a9e5ebf3808ee7d45de048d127342b940719f /Zend
parent8619bf83325a3ee1ac21bfe5e71c9c14fd46a51e (diff)
downloadphp-git-842b1b5a4718b0806b2127f6423f994a06beee03.tar.gz
Fixed bug #39445 (Calling debug_backtrace() in the __toString() function produces a crash)
Diffstat (limited to 'Zend')
-rwxr-xr-xZend/tests/bug39445.phpt16
-rw-r--r--Zend/zend_builtin_functions.c4
2 files changed, 19 insertions, 1 deletions
diff --git a/Zend/tests/bug39445.phpt b/Zend/tests/bug39445.phpt
new file mode 100755
index 0000000000..cf1607f2dd
--- /dev/null
+++ b/Zend/tests/bug39445.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #39445 (Calling debug_backtrace() in the __toString() function produces a crash)
+--FILE--
+<?php
+class test {
+ public function __toString() {
+ debug_backtrace();
+ return 'lowercase';
+ }
+}
+
+ $test = new test();
+ echo strtoupper($test);
+?>
+--EXPECT--
+LOWERCASE
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 6ae3a0fbd5..b623ea5abf 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1661,7 +1661,9 @@ static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC)
while (--arg_count >= 0) {
arg = (zval **) p++;
if (*arg) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(arg);
+ if ((*arg)->type != IS_OBJECT) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(arg);
+ }
(*arg)->refcount++;
add_next_index_zval(arg_array, *arg);
} else {