summaryrefslogtreecommitdiff
path: root/Zend/zend_builtin_functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_builtin_functions.c')
-rw-r--r--Zend/zend_builtin_functions.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 34fe3db7c0..9fb2bfd68d 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1685,7 +1685,9 @@ ZEND_FUNCTION(debug_print_backtrace)
array_init(return_value);
while (ptr) {
- class_name = call_type = NULL;
+ char *free_class_name = NULL;
+
+ class_name = call_type = NULL;
arg_array = NULL;
if (ptr->op_array) {
filename = ptr->op_array->filename;
@@ -1702,8 +1704,9 @@ ZEND_FUNCTION(debug_print_backtrace)
zend_uint class_name_len;
if (Z_OBJ_HT_P(ptr->object)->get_class_name == NULL ||
Z_OBJ_HT_P(ptr->object)->get_class_name(ptr->object, &class_name, &class_name_len, 0 TSRMLS_CC) != SUCCESS) {
-
- class_name = Z_OBJCE(*ptr->object)->name;
+ class_name = Z_OBJCE(*ptr->object)->name;
+ } else {
+ free_class_name = class_name;
}
call_type = "->";
} else if (ptr->function_state.function->common.scope) {
@@ -1769,6 +1772,9 @@ ZEND_FUNCTION(debug_print_backtrace)
include_filename = filename;
ptr = ptr->prev_execute_data;
++indent;
+ if (free_class_name) {
+ efree(free_class_name);
+ }
}
}