Skip to content

Commit

Permalink
Track args in do_action/apply_filters, {closure}s
Browse files Browse the repository at this point in the history
  • Loading branch information
kovshenin committed Oct 1, 2021
1 parent ca4cde8 commit b7f1ffb
Showing 1 changed file with 38 additions and 4 deletions.
42 changes: 38 additions & 4 deletions extension/xhprof.c
Original file line number Diff line number Diff line change
Expand Up @@ -1301,18 +1301,45 @@ zend_string *hp_pcre_replace(zend_string *pattern, zend_string *repl, zval *data
return replace;
}

zend_string *hp_trace_callback_apply_filters(zend_string *function_name, zend_execute_data *data)
{
zend_string *trace_name;
zval *arg = ZEND_CALL_ARG(data, 1);
if (Z_TYPE_P(arg) != IS_STRING) {
return function_name;
}
trace_name = strpprintf(0, "%s#%s", ZSTR_VAL(function_name), Z_STRVAL_P(arg));
return trace_name;
}

zend_string *hp_trace_callback_closure(zend_string *function_name, zend_execute_data *data)
{
zend_string *trace_name;
uint32_t line_start;

line_start = data->func->op_array.line_start;

trace_name = strpprintf(0, "%s#%s:%d", ZSTR_VAL(function_name),
ZSTR_VAL(data->func->op_array.filename), line_start);
return trace_name;
}

zend_string *hp_trace_callback_sql_query(zend_string *function_name, zend_execute_data *data)
{
zend_string *trace_name;
zval *arg;

if (strcmp(ZSTR_VAL(function_name), "mysqli_query") == 0) {
zval *arg = ZEND_CALL_ARG(data, 2);
trace_name = strpprintf(0, "%s#%s", ZSTR_VAL(function_name), Z_STRVAL_P(arg));
arg = ZEND_CALL_ARG(data, 2);
} else {
zval *arg = ZEND_CALL_ARG(data, 1);
trace_name = strpprintf(0, "%s#%s", ZSTR_VAL(function_name), Z_STRVAL_P(arg));
arg = ZEND_CALL_ARG(data, 1);
}

if (Z_TYPE_P(arg) != IS_STRING) {
return function_name;
}

trace_name = strpprintf(0, "%s#%s", ZSTR_VAL(function_name), Z_STRVAL_P(arg));
return trace_name;
}

Expand Down Expand Up @@ -1482,4 +1509,11 @@ void hp_init_trace_callbacks()

callback = hp_trace_callback_curl_exec;
register_trace_callback("curl_exec", callback);

callback = hp_trace_callback_apply_filters;
register_trace_callback("apply_filters", callback);
register_trace_callback("do_action", callback);

callback = hp_trace_callback_closure;
register_trace_callback("{closure}", callback);
}

0 comments on commit b7f1ffb

Please sign in to comment.