]> granicus.if.org Git - php/commitdiff
Fixed bug #39445 (Calling debug_backtrace() in the __toString() function produces...
authorDmitry Stogov <dmitry@php.net>
Wed, 15 Nov 2006 16:05:26 +0000 (16:05 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 15 Nov 2006 16:05:26 +0000 (16:05 +0000)
Zend/tests/bug39445.phpt [new file with mode: 0755]
Zend/zend_builtin_functions.c

diff --git a/Zend/tests/bug39445.phpt b/Zend/tests/bug39445.phpt
new file mode 100755 (executable)
index 0000000..cf1607f
--- /dev/null
@@ -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
index 3c90193a050496f707a4a1a7b1adeac4f13ea5a7..fd59b12bc21be4298225350ffd27a18c11b07263 100644 (file)
@@ -1755,7 +1755,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 {