From fe43991e3dc6c46e2781d21369f5e268de7baef9 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 10 Oct 2017 18:11:31 +0200 Subject: Implement match on arguments position --- src/sp_disabled_functions.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/sp_disabled_functions.c') diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index c8c723a..b05d949 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -178,11 +178,17 @@ bool should_disable(zend_execute_data* execute_data) { } /* Check if we filter on parameter value*/ - if (config_node->param || config_node->r_param) { - const unsigned int nb_param = execute_data->func->common.num_args; + if (config_node->param || config_node->r_param || (config_node->pos != -1)) { + unsigned int nb_param = execute_data->func->common.num_args; bool arg_matched = false; + int i = 0; - for (unsigned int i = 0; i < nb_param; i++) { + if (config_node->pos != -1) {//&& nb_param <= config_node->pos) { + i = config_node->pos; + nb_param = (config_node->pos) + 1; + } + + for (; i < nb_param; i++) { arg_matched = false; if (ZEND_USER_CODE(execute_data->func->type)) { // yay consistency arg_name = ZSTR_VAL(execute_data->func->common.arg_info[i].name); @@ -197,7 +203,7 @@ bool should_disable(zend_execute_data* execute_data) { (true == is_regexp_matching(config_node->r_param, arg_name)); /* This is the parameter name we're looking for. */ - if (true == arg_matching || true == pcre_matching) { + if (true == arg_matching || true == pcre_matching || (config_node->pos != -1)) { zval* arg_value = ZEND_CALL_VAR_NUM(execute_data, i); if (config_node->param_type) { // Are we matching on the `type`? -- cgit v1.3 From 63928badcf79c4f6abcac602a681e2f29ea37894 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 18 Oct 2017 13:19:27 +0200 Subject: Fix a possible mistake --- src/sp_disabled_functions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp_disabled_functions.c') diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index b05d949..cca95ef 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -183,7 +183,7 @@ bool should_disable(zend_execute_data* execute_data) { bool arg_matched = false; int i = 0; - if (config_node->pos != -1) {//&& nb_param <= config_node->pos) { + if ((config_node->pos != -1) && (config_node->pos <= nb_param)) { i = config_node->pos; nb_param = (config_node->pos) + 1; } -- cgit v1.3 From 09a4af846c436398f44cc4057a6b48ef51a85c63 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 18 Oct 2017 13:42:35 +0200 Subject: Add some debug --- src/sp_disabled_functions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp_disabled_functions.c') diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index cca95ef..54a1906 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -179,7 +179,7 @@ bool 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)) { - unsigned int nb_param = execute_data->func->common.num_args; + int nb_param = execute_data->func->common.num_args; bool arg_matched = false; int i = 0; -- cgit v1.3