]> granicus.if.org Git - php/commitdiff
Fixed memory leak in debug_print_backtrace()
authorDmitry Stogov <dmitry@php.net>
Tue, 7 Jun 2005 13:14:23 +0000 (13:14 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 7 Jun 2005 13:14:23 +0000 (13:14 +0000)
Zend/zend_builtin_functions.c

index 34fe3db7c0b6a5b372b777636f9d0aeefb1d4597..9fb2bfd68d7c4ccb59cf5d8089e70a32af3cbe98 100644 (file)
@@ -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);
+               }
        }
 }