From ca3be84076521c4bb053511775c94c0b195aeac8 Mon Sep 17 00:00:00 2001 From: kkadosh Date: Thu, 28 Jun 2018 21:43:40 +0000 Subject: Better handling of filters for builtins --- src/sp_disabled_functions.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 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 eeee007..341c0a4 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -248,6 +248,23 @@ static zend_execute_data* is_file_matching( #undef ITERATE } +static bool check_is_builtin_name( + sp_disabled_function const* const config_node) { + if (config_node->function) { + return (!strcmp(config_node->function, "include") || + !strcmp(config_node->function, "include_once") || + !strcmp(config_node->function, "require") || + !strcmp(config_node->function, "require_once")); + } + if (config_node->r_function) { + return (sp_is_regexp_matching(config_node->r_function, "include") || + sp_is_regexp_matching(config_node->r_function, "include_once") || + sp_is_regexp_matching(config_node->r_function, "require") || + sp_is_regexp_matching(config_node->r_function, "require_once")); + } + return false; +} + bool should_disable(zend_execute_data* execute_data, const char* builtin_name, const char* builtin_param, const char* builtin_param_name) { char current_file_hash[SHA256_SIZE * 2 + 1] = {0}; @@ -303,13 +320,11 @@ bool should_disable(zend_execute_data* execute_data, const char* builtin_name, 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); @@ -327,7 +342,6 @@ bool should_disable(zend_execute_data* execute_data, const char* builtin_name, goto next; } } - if (config_node->var) { if (false == is_local_var_matching(execute_data, config_node)) { goto next; @@ -360,8 +374,17 @@ bool should_disable(zend_execute_data* execute_data, const char* builtin_name, } } - /* Everything matched.*/ + if (config_node->value_r || config_node->value) { + if (check_is_builtin_name(config_node)) { + if (false == is_param_matching(execute_data, config_node, builtin_name, + builtin_param, &arg_name, + builtin_param_name, &arg_value_str)) { + goto next; + } + } + } + /* Everything matched.*/ if (true == config_node->allow) { goto allow; } -- cgit v1.3