From f742d9f88bf788e38bbe832f1b75e39784f024bc Mon Sep 17 00:00:00 2001 From: Ben Fuhrmannek Date: Mon, 15 Jun 2020 11:50:13 +0200 Subject: fixed trigger logic to parameter matching --- src/sp_disabled_functions.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'src/sp_disabled_functions.c') diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index c088f20..5daf068 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -102,8 +102,8 @@ static bool is_local_var_matching( static bool is_param_matching(zend_execute_data* execute_data, sp_disabled_function const* const config_node, const zend_string* builtin_param, - const char** arg_name, const char* builtin_param_name, + const char** arg_name, const zend_string** arg_value_str) { int nb_param = ZEND_CALL_NUM_ARGS(execute_data); int i = 0; @@ -313,11 +313,13 @@ static void should_disable(zend_execute_data* execute_data, goto next; } } + if (config_node->line) { if (config_node->line != zend_get_executed_lineno()) { goto next; } } + if (config_node->filename || config_node->r_filename) { zend_execute_data* ex = is_file_matching(execute_data, config_node, current_filename); @@ -332,6 +334,7 @@ static void should_disable(zend_execute_data* execute_data, goto next; } } + if (config_node->var) { if (false == is_local_var_matching(execute_data, config_node)) { goto next; @@ -350,7 +353,8 @@ static void should_disable(zend_execute_data* execute_data, /* Check if we filter on parameter value*/ if (config_node->param || config_node->r_param || - (config_node->pos != -1)) { + (config_node->pos != -1) || + ((config_node->r_value || config_node->value) && !config_node->var)) { if (!builtin_param && execute_data->func->op_array.arg_info->is_variadic) { sp_log_warn( @@ -359,24 +363,12 @@ static void should_disable(zend_execute_data* execute_data, "Check https://github.com/nbs-system/snuffleupagus/issues/164 for " "details."); } else if (false == is_param_matching( - execute_data, config_node, builtin_param, - &arg_name, builtin_param_name, &arg_value_str)) { + execute_data, config_node, builtin_param, builtin_param_name, + &arg_name, &arg_value_str)) { goto next; } } - if (config_node->r_value || config_node->value) { - if (check_is_builtin_name(config_node) && !config_node->var && - !config_node->key && !config_node->r_key && !config_node->param && - !config_node->r_param) { - if (false == is_param_matching(execute_data, config_node, builtin_param, - &arg_name, builtin_param_name, - &arg_value_str)) { - goto next; - } - } - } - /* Everything matched.*/ if (true == config_node->allow) { return; -- cgit v1.3