Skip to content

Commit

Permalink
Merged pull request #593
Browse files Browse the repository at this point in the history
  • Loading branch information
derickr committed Jul 2, 2020
2 parents 97a2fbb + 1060a45 commit b88e0f1
Show file tree
Hide file tree
Showing 34 changed files with 303 additions and 306 deletions.
2 changes: 1 addition & 1 deletion php_xdebug.h
Expand Up @@ -90,7 +90,7 @@ struct xdebug_base_info {
zend_long error_reporting_override;
zend_bool error_reporting_overridden;
unsigned int function_count;
char *last_eval_statement;
zend_string *last_eval_statement;
char *last_exception_trace;

/* in-execution checking */
Expand Down
38 changes: 19 additions & 19 deletions src/base/base.c
Expand Up @@ -114,7 +114,7 @@ static void function_stack_entry_dtor(void *dummy, void *elem)
xdebug_func_dtor_by_ref(&e->function);

if (e->filename) {
xdfree(e->filename);
zend_string_release(e->filename);
}

if (e->var) {
Expand All @@ -128,7 +128,7 @@ static void function_stack_entry_dtor(void *dummy, void *elem)
}

if (e->include_filename) {
xdfree(e->include_filename);
zend_string_release(e->include_filename);
}

if (e->declared_vars) {
Expand Down Expand Up @@ -211,9 +211,9 @@ int xdebug_include_or_eval_handler(XDEBUG_OPCODE_HANDLER_ARGS)

/* Now let's store this info */
if (XG_BASE(last_eval_statement)) {
efree(XG_BASE(last_eval_statement));
zend_string_release(XG_BASE(last_eval_statement));
}
XG_BASE(last_eval_statement) = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
XG_BASE(last_eval_statement) = zend_string_init(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename), 0);

if (inc_filename == &tmp_inc_filename) {
zval_dtor(&tmp_inc_filename);
Expand Down Expand Up @@ -269,11 +269,11 @@ void xdebug_build_fname(xdebug_func *tmp, zend_execute_data *edata)
if (edata->func->common.fn_flags & ZEND_ACC_CLOSURE) {
tmp->function = xdebug_wrap_closure_location_around_function_name(&edata->func->op_array, edata->func->common.function_name->val);
} else if (strncmp(edata->func->common.function_name->val, "call_user_func", 14) == 0) {
const char *fname = NULL;
int lineno = 0;
zend_string *fname = NULL;
int lineno = 0;

if (edata->prev_execute_data && edata->prev_execute_data->func && edata->prev_execute_data->func->type == ZEND_USER_FUNCTION) {
fname = edata->prev_execute_data->func->op_array.filename->val;
fname = edata->prev_execute_data->func->op_array.filename;
}

if (
Expand All @@ -295,7 +295,7 @@ void xdebug_build_fname(xdebug_func *tmp, zend_execute_data *edata)
tmp->function = xdebug_sprintf(
"%s:{%s:%d}",
edata->func->common.function_name->val,
fname,
ZSTR_VAL(fname),
lineno
);
} else {
Expand Down Expand Up @@ -404,13 +404,13 @@ function_stack_entry *xdebug_add_stack_frame(zend_execute_data *zdata, zend_op_a
ptr = ptr->prev_execute_data;
}
if (ptr) {
tmp->filename = xdstrdup(ptr->func->op_array.filename->val);
tmp->filename = zend_string_copy(ptr->func->op_array.filename);
}
}

if (!tmp->filename) {
/* Includes/main script etc */
tmp->filename = (type == XDEBUG_USER_DEFINED && op_array && op_array->filename) ? xdstrdup(op_array->filename->val): NULL;
tmp->filename = (type == XDEBUG_USER_DEFINED && op_array && op_array->filename) ? zend_string_copy(op_array->filename) : NULL;
}
/* Call user function locations */
if (
Expand All @@ -420,11 +420,11 @@ function_stack_entry *xdebug_add_stack_frame(zend_execute_data *zdata, zend_op_a
XDEBUG_LLIST_VALP(XDEBUG_LLIST_TAIL(XG_BASE(stack))) &&
((function_stack_entry*) XDEBUG_LLIST_VALP(XDEBUG_LLIST_TAIL(XG_BASE(stack))))->filename
) {
tmp->filename = xdstrdup(((function_stack_entry*) XDEBUG_LLIST_VALP(XDEBUG_LLIST_TAIL(XG_BASE(stack))))->filename);
tmp->filename = zend_string_copy(((function_stack_entry*) XDEBUG_LLIST_VALP(XDEBUG_LLIST_TAIL(XG_BASE(stack))))->filename);
}

if (!tmp->filename) {
tmp->filename = xdstrdup("UNKNOWN?");
tmp->filename = zend_string_init("UNKNOWN?", sizeof("UNKNOWN?") - 1, 0);
}
tmp->prev_memory = XG_BASE(prev_memory);
tmp->memory = zend_memory_usage(0);
Expand All @@ -448,10 +448,10 @@ function_stack_entry *xdebug_add_stack_frame(zend_execute_data *zdata, zend_op_a
}
}

if (tmp->function.type == XFUNC_EVAL) {
tmp->include_filename = xdebug_sprintf("%s", XG_BASE(last_eval_statement));
if (tmp->function.type == XFUNC_EVAL && XG_BASE(last_eval_statement)) {
tmp->include_filename = zend_string_copy(XG_BASE(last_eval_statement));
} else if (XINI_DEV(collect_includes)) {
tmp->include_filename = xdstrdup(zend_get_executed_filename());
tmp->include_filename = zend_string_copy(zend_get_executed_filename_ex());
}
} else {
tmp->lineno = find_line_number_for_current_execute_point(edata);
Expand Down Expand Up @@ -559,7 +559,7 @@ static void xdebug_execute_ex(zend_execute_data *execute_data)
int function_nr = 0;
xdebug_llist_element *le;
char *code_coverage_function_name = NULL;
char *code_coverage_file_name = NULL;
zend_string *code_coverage_filename = NULL;
int code_coverage_init = 0;

/* For PHP 7, we need to reset the opline to the start, so that all opcode
Expand Down Expand Up @@ -654,7 +654,7 @@ static void xdebug_execute_ex(zend_execute_data *execute_data)
}

if (xdebug_lib_mode_is(XDEBUG_MODE_COVERAGE)) {
code_coverage_init = xdebug_coverage_execute_ex(fse, op_array, &code_coverage_file_name, &code_coverage_function_name);
code_coverage_init = xdebug_coverage_execute_ex(fse, op_array, &code_coverage_filename, &code_coverage_function_name);
}

if (xdebug_lib_mode_is(XDEBUG_MODE_STEP_DEBUG)) {
Expand All @@ -678,7 +678,7 @@ static void xdebug_execute_ex(zend_execute_data *execute_data)
}

if (code_coverage_init) {
xdebug_coverage_execute_ex_end(fse, op_array, code_coverage_file_name, code_coverage_function_name);
xdebug_coverage_execute_ex_end(fse, op_array, code_coverage_filename, code_coverage_function_name);
}

if (xdebug_lib_mode_is(XDEBUG_MODE_TRACING)) {
Expand Down Expand Up @@ -973,7 +973,7 @@ void xdebug_base_post_deactivate()
XG_BASE(in_debug_info) = 0;

if (XG_BASE(last_eval_statement)) {
efree(XG_BASE(last_eval_statement));
zend_string_release(XG_BASE(last_eval_statement));
XG_BASE(last_eval_statement) = NULL;
}
if (XG_BASE(last_exception_trace)) {
Expand Down
4 changes: 2 additions & 2 deletions src/base/filter.c
Expand Up @@ -57,7 +57,7 @@ void xdebug_filter_register_constants(INIT_FUNC_ARGS)

static int xdebug_filter_match_path_include(function_stack_entry *fse, long *filtered_flag, char *filter)
{
if (strncasecmp(filter, fse->filename, strlen(filter)) == 0) {
if (strncasecmp(filter, ZSTR_VAL(fse->filename), strlen(filter)) == 0) {
*filtered_flag = 0;
return 1;
}
Expand All @@ -66,7 +66,7 @@ static int xdebug_filter_match_path_include(function_stack_entry *fse, long *fil

static int xdebug_filter_match_path_exclude(function_stack_entry *fse, long *filtered_flag, char *filter)
{
if (strncasecmp(filter, fse->filename, strlen(filter)) == 0) {
if (strncasecmp(filter, ZSTR_VAL(fse->filename), strlen(filter)) == 0) {
*filtered_flag = 1;
return 1;
}
Expand Down
33 changes: 19 additions & 14 deletions src/coverage/branch_info.c
Expand Up @@ -339,19 +339,22 @@ void xdebug_branch_find_paths(xdebug_branch_info *branch_info)
}
}

void xdebug_branch_info_mark_reached(char *file_name, char *function_name, zend_op_array *op_array, long opcode_nr)
void xdebug_branch_info_mark_reached(zend_string *filename, char *function_name, zend_op_array *op_array, long opcode_nr)
{
xdebug_coverage_file *file;
xdebug_coverage_function *function;
xdebug_branch_info *branch_info;

if (XG_COV(previous_mark_filename) && strcmp(XG_COV(previous_mark_filename), file_name) == 0) {
if (XG_COV(previous_mark_filename) && zend_string_equals(XG_COV(previous_mark_filename), filename)) {
file = XG_COV(previous_mark_file);
} else {
if (!xdebug_hash_find(XG_COV(code_coverage_info), file_name, strlen(file_name), (void *) &file)) {
if (!xdebug_hash_find(XG_COV(code_coverage_info), ZSTR_VAL(filename), ZSTR_LEN(filename), (void *) &file)) {
return;
}
XG_COV(previous_mark_filename) = file->name;
if (XG_COV(previous_mark_filename)) {
zend_string_release(XG_COV(previous_mark_filename));
}
XG_COV(previous_mark_filename) = zend_string_copy(file->name);
XG_COV(previous_mark_file) = file;
}

Expand All @@ -368,7 +371,7 @@ void xdebug_branch_info_mark_reached(char *file_name, char *function_name, zend_
branch_info = function->branch_info;

if (opcode_nr != 0 && xdebug_set_in(branch_info->entry_points, opcode_nr)) {
xdebug_code_coverage_end_of_function(op_array, file_name, function_name);
xdebug_code_coverage_end_of_function(op_array, filename, function_name);
xdebug_code_coverage_start_of_function(op_array, function_name);
}

Expand Down Expand Up @@ -400,20 +403,21 @@ void xdebug_branch_info_mark_reached(char *file_name, char *function_name, zend_
}
}

void xdebug_branch_info_mark_end_of_function_reached(char *filename, char *function_name, char *key, int key_len)
void xdebug_branch_info_mark_end_of_function_reached(zend_string *filename, char *function_name, char *key, int key_len)
{
xdebug_coverage_file *file;
xdebug_coverage_function *function;
xdebug_branch_info *branch_info;
xdebug_path *path;

if (XG_COV(previous_mark_filename) && strcmp(XG_COV(previous_mark_filename), filename) == 0) {
if (XG_COV(previous_mark_filename) && zend_string_equals(XG_COV(previous_mark_filename), filename) == 0) {
file = XG_COV(previous_mark_file);
} else {
if (!xdebug_hash_find(XG_COV(code_coverage_info), filename, strlen(filename), (void *) &file)) {
if (!xdebug_hash_find(XG_COV(code_coverage_info), ZSTR_VAL(filename), ZSTR_LEN(filename), (void *) &file)) {
return;
}
XG_COV(previous_mark_filename) = file->name;
zend_string_release(XG_COV(previous_mark_filename));
XG_COV(previous_mark_filename) = zend_string_copy(file->name);
XG_COV(previous_mark_file) = file;
}

Expand All @@ -435,22 +439,23 @@ void xdebug_branch_info_mark_end_of_function_reached(char *filename, char *funct
path->hit = 1;
}

void xdebug_branch_info_add_branches_and_paths(char *filename, char *function_name, xdebug_branch_info *branch_info)
void xdebug_branch_info_add_branches_and_paths(zend_string *filename, char *function_name, xdebug_branch_info *branch_info)
{
xdebug_coverage_file *file;
xdebug_coverage_function *function;

if (XG_COV(previous_filename) && strcmp(XG_COV(previous_filename), filename) == 0) {
if (XG_COV(previous_filename) && zend_string_equals(XG_COV(previous_filename), filename) == 0) {
file = XG_COV(previous_file);
} else {
/* Check if the file already exists in the hash */
if (!xdebug_hash_find(XG_COV(code_coverage_info), filename, strlen(filename), (void *) &file)) {
if (!xdebug_hash_find(XG_COV(code_coverage_info), ZSTR_VAL(filename), ZSTR_LEN(filename), (void *) &file)) {
/* The file does not exist, so we add it to the hash */
file = xdebug_coverage_file_ctor(filename);

xdebug_hash_add(XG_COV(code_coverage_info), filename, strlen(filename), file);
xdebug_hash_add(XG_COV(code_coverage_info), ZSTR_VAL(filename), ZSTR_LEN(filename), file);
}
XG_COV(previous_filename) = file->name;
zend_string_release(XG_COV(previous_filename));
XG_COV(previous_filename) = zend_string_copy(file->name);
XG_COV(previous_file) = file;
}

Expand Down
6 changes: 3 additions & 3 deletions src/coverage/branch_info.h
Expand Up @@ -79,7 +79,7 @@ void xdebug_branch_post_process(zend_op_array *opa, xdebug_branch_info *branch_i
void xdebug_branch_find_paths(xdebug_branch_info *branch_info);

void xdebug_branch_info_dump(zend_op_array *opa, xdebug_branch_info *branch_info);
void xdebug_branch_info_add_branches_and_paths(char *filename, char *function_name, xdebug_branch_info *branch_info);
void xdebug_branch_info_add_branches_and_paths(zend_string *filename, char *function_name, xdebug_branch_info *branch_info);
void xdebug_branch_info_free(xdebug_branch_info *branch_info);

xdebug_path *xdebug_path_new(xdebug_path *old_path);
Expand All @@ -93,6 +93,6 @@ xdebug_path *xdebug_path_info_get_path_for_level(xdebug_path_info *path_info, un

void xdebug_create_key_for_path(xdebug_path *path, xdebug_str *str);

void xdebug_branch_info_mark_reached(char *filename, char *function_name, zend_op_array *op_array, long opcode_nr);
void xdebug_branch_info_mark_end_of_function_reached(char *filename, char *function_name, char *key, int key_len);
void xdebug_branch_info_mark_reached(zend_string *filename, char *function_name, zend_op_array *op_array, long opcode_nr);
void xdebug_branch_info_mark_end_of_function_reached(zend_string *filename, char *function_name, char *key, int key_len);
#endif

0 comments on commit b88e0f1

Please sign in to comment.