diff options
Diffstat (limited to 'Zend/zend_builtin_functions.c')
| -rw-r--r-- | Zend/zend_builtin_functions.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index df4e7bd3ee..ba54430bbe 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1713,12 +1713,16 @@ ZEND_FUNCTION(debug_print_backtrace) if (function_name) { if (ptr->object) { - 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; + if (ptr->function_state.function->common.scope) { + class_name = ptr->function_state.function->common.scope->name; } else { - free_class_name = class_name; + 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; + } else { + free_class_name = class_name; + } } call_type = "->"; } else if (ptr->function_state.function->common.scope) { @@ -1870,12 +1874,16 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last TSRML add_assoc_string_ex(stack_frame, "function", sizeof("function"), function_name, 1); if (ptr->object && Z_TYPE_P(ptr->object) == IS_OBJECT) { - 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) { - add_assoc_string_ex(stack_frame, "class", sizeof("class"), Z_OBJCE(*ptr->object)->name, 1); + if (ptr->function_state.function->common.scope) { + add_assoc_string_ex(stack_frame, "class", sizeof("class"), ptr->function_state.function->common.scope->name, 1); } else { - add_assoc_string_ex(stack_frame, "class", sizeof("class"), class_name, 0); + 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) { + add_assoc_string_ex(stack_frame, "class", sizeof("class"), Z_OBJCE(*ptr->object)->name, 1); + } else { + add_assoc_string_ex(stack_frame, "class", sizeof("class"), class_name, 0); + } } add_assoc_string_ex(stack_frame, "type", sizeof("type"), "->", 1); } else if (ptr->function_state.function->common.scope) { |
