From b213c8e08b5624da9bb69dd05e132e247bab3082 Mon Sep 17 00:00:00 2001 From: simon MAGNIN-FEYSOT Date: Wed, 17 Jan 2018 19:25:08 +0100 Subject: Remove useless "head" member in our linked lists implementation This should close #85 --- src/snuffleupagus.c | 14 +++++++------- src/sp_config_keywords.c | 23 +++++++++++----------- src/sp_config_utils.c | 4 ++-- src/sp_disabled_functions.c | 2 +- src/sp_execute.c | 3 ++- src/sp_list.c | 47 ++++++++++++++------------------------------- src/sp_list.h | 6 ++---- src/sp_utils.c | 2 +- src/sp_var_parser.c | 9 ++++----- 9 files changed, 45 insertions(+), 65 deletions(-) (limited to 'src') diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index cb79b23..78a8659 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -79,16 +79,16 @@ PHP_GINIT_FUNCTION(snuffleupagus) { SP_INIT(snuffleupagus_globals->config.config_eval); snuffleupagus_globals->config.config_disabled_constructs->construct_include = - sp_list_new(); + NULL; snuffleupagus_globals->config.config_disabled_constructs->construct_eval = - sp_list_new(); + NULL; snuffleupagus_globals->config.config_disabled_functions->disabled_functions = - sp_list_new(); + NULL; snuffleupagus_globals->config.config_disabled_functions_ret - ->disabled_functions = sp_list_new(); - snuffleupagus_globals->config.config_cookie->cookies = sp_list_new(); - snuffleupagus_globals->config.config_eval->blacklist = sp_list_new(); - snuffleupagus_globals->config.config_eval->whitelist = sp_list_new(); + ->disabled_functions = NULL; + snuffleupagus_globals->config.config_cookie->cookies = NULL; + snuffleupagus_globals->config.config_eval->blacklist = NULL; + snuffleupagus_globals->config.config_eval->whitelist = NULL; #undef SP_INIT #undef SP_INIT_HT diff --git a/src/sp_config_keywords.c b/src/sp_config_keywords.c index 135868b..93c3da9 100644 --- a/src/sp_config_keywords.c +++ b/src/sp_config_keywords.c @@ -102,7 +102,7 @@ int parse_global(char *line) { return parse_keywords(sp_config_funcs_global, line); } -static int parse_eval_filter_conf(char *line, sp_list_node *list) { +static int parse_eval_filter_conf(char *line, sp_list_node **list) { char *token; char *rest; sp_config_functions sp_config_funcs[] = { @@ -116,19 +116,19 @@ static int parse_eval_filter_conf(char *line, sp_list_node *list) { } while ((token = strtok_r(rest, ",", &rest))) { - sp_list_insert(list, token); + *list = sp_list_insert(*list, token); } return SUCCESS; } int parse_eval_blacklist(char *line) { return parse_eval_filter_conf(line, - SNUFFLEUPAGUS_G(config).config_eval->blacklist); + &SNUFFLEUPAGUS_G(config).config_eval->blacklist); } int parse_eval_whitelist(char *line) { return parse_eval_filter_conf(line, - SNUFFLEUPAGUS_G(config).config_eval->whitelist); + &SNUFFLEUPAGUS_G(config).config_eval->whitelist); } int parse_cookie(char *line) { @@ -204,7 +204,8 @@ int parse_cookie(char *line) { return -1; } } - sp_list_insert(SNUFFLEUPAGUS_G(config).config_cookie->cookies, cookie); + SNUFFLEUPAGUS_G(config).config_cookie->cookies = sp_list_insert( + SNUFFLEUPAGUS_G(config).config_cookie->cookies, cookie); return SUCCESS; } @@ -371,12 +372,12 @@ int parse_disabled_functions(char *line) { switch (get_construct_type(df)) { case ZEND_INCLUDE_OR_EVAL: - sp_list_insert( + SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_include = sp_list_insert( SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_include, df); return ret; case ZEND_EVAL_CODE: - sp_list_insert( + SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_eval = sp_list_insert( SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_eval, df); return ret; @@ -390,11 +391,11 @@ int parse_disabled_functions(char *line) { } if (df->ret || df->r_ret || df->ret_type) { - sp_list_insert(SNUFFLEUPAGUS_G(config) - .config_disabled_functions_ret->disabled_functions, - df); + SNUFFLEUPAGUS_G(config).config_disabled_functions_ret->disabled_functions = sp_list_insert( + SNUFFLEUPAGUS_G(config).config_disabled_functions_ret->disabled_functions, + df); } else { - sp_list_insert( + SNUFFLEUPAGUS_G(config).config_disabled_functions->disabled_functions = sp_list_insert( SNUFFLEUPAGUS_G(config).config_disabled_functions->disabled_functions, df); } diff --git a/src/sp_config_utils.c b/src/sp_config_utils.c index 20d4d79..130f07e 100644 --- a/src/sp_config_utils.c +++ b/src/sp_config_utils.c @@ -105,12 +105,12 @@ zend_always_inline sp_list_node *parse_functions_list(char *value) { return NULL; } - sp_list_node *list = sp_list_new(); + sp_list_node *list = NULL; char *tmp = strdup(value); char *function_name; char *next_token = tmp; while ((function_name = strtok_r(NULL, sep, &next_token))) { - sp_list_prepend(list, strdup(function_name)); + list = sp_list_prepend(list, strdup(function_name)); } free(tmp); diff --git a/src/sp_disabled_functions.c b/src/sp_disabled_functions.c index bb4a402..5619e1f 100644 --- a/src/sp_disabled_functions.c +++ b/src/sp_disabled_functions.c @@ -501,7 +501,7 @@ int hook_disabled_functions(void) { ret |= hook_functions(SNUFFLEUPAGUS_G(config) .config_disabled_functions_ret->disabled_functions); - if (NULL != SNUFFLEUPAGUS_G(config).config_eval->blacklist->data) { + if (NULL != SNUFFLEUPAGUS_G(config).config_eval->blacklist) { sp_list_node* it = SNUFFLEUPAGUS_G(config).config_eval->blacklist; while (it) { diff --git a/src/sp_execute.c b/src/sp_execute.c index ac7cee3..036f1a4 100644 --- a/src/sp_execute.c +++ b/src/sp_execute.c @@ -50,7 +50,8 @@ is_in_eval_and_whitelisted(const zend_execute_data *execute_data) { return; } - if (EXPECTED(NULL == SNUFFLEUPAGUS_G(config).config_eval->whitelist->data)) { + if (EXPECTED(NULL == SNUFFLEUPAGUS_G(config).config_eval->whitelist || + NULL == SNUFFLEUPAGUS_G(config).config_eval->whitelist->data)) { return; } diff --git a/src/sp_list.c b/src/sp_list.c index 447f479..8879d89 100644 --- a/src/sp_list.c +++ b/src/sp_list.c @@ -11,12 +11,6 @@ void sp_list_free(sp_list_node *node) { } } -sp_list_node *sp_list_new() { - sp_list_node *new = pecalloc(sizeof(*new), 1, 1); - new->next = new->data = new->head = NULL; - return new; -} - // Thanks to https://en.wikipedia.org/wiki/Insertion_sort :> sp_list_node *sp_list_sort(sp_list_node *pList, int (*cmp_func)(sp_list_node *, sp_list_node *)) { @@ -46,39 +40,26 @@ sp_list_node *sp_list_sort(sp_list_node *pList, return head; } -void sp_list_insert(sp_list_node *list, void *data) { - if (list->head == NULL) { - list->data = data; - list->next = NULL; - list->head = list; - } else { - sp_list_node *new = pecalloc(sizeof(*new), 1, 1); - - new->data = data; - new->next = NULL; - new->head = list; +sp_list_node *sp_list_insert(sp_list_node *list, void *data) { + sp_list_node *new = pecalloc(sizeof(*new), 1, 1); + sp_list_node *origin = list; + new->data = data; + new->next = NULL; + if (list == NULL) { + origin = new; + } else { while (list->next) { list = list->next; } list->next = new; } + return origin; } -void sp_list_prepend(sp_list_node *list, void *data) { - if (list->head == NULL) { - list->data = data; - list->next = NULL; - list->head = list; - } else { - sp_list_node *new = pecalloc(sizeof(*new), 1, 1); - - new->next = list->next; - list->next = new; - - new->head = list; - - new->data = list->data; - list->data = data; - } +sp_list_node *sp_list_prepend(sp_list_node *list, void *data) { + sp_list_node *new = pecalloc(sizeof(*new), 1, 1); + new->next = list; + new->data = data; + return new; } diff --git a/src/sp_list.h b/src/sp_list.h index 8477463..6b04486 100644 --- a/src/sp_list.h +++ b/src/sp_list.h @@ -3,16 +3,14 @@ typedef struct sp_node_s { struct sp_node_s *next; - struct sp_node_s *head; void *data; } sp_list_node; -sp_list_node *sp_list_new(); sp_list_node *sp_list_sort(sp_list_node *, int (*)(sp_list_node *, sp_list_node *)); -void sp_list_insert(sp_list_node *, void *); +sp_list_node *sp_list_insert(sp_list_node *, void *); +sp_list_node *sp_list_prepend(sp_list_node *, void *); void sp_list_free(sp_list_node *); -void sp_list_prepend(sp_list_node *, void *); #endif diff --git a/src/sp_utils.c b/src/sp_utils.c index 9cd2888..e1fc630 100644 --- a/src/sp_utils.c +++ b/src/sp_utils.c @@ -397,7 +397,7 @@ int hook_regexp(const pcre* regexp, HashTable* hook_table, bool check_is_in_eval_whitelist(const char* const function_name) { const sp_list_node* it = SNUFFLEUPAGUS_G(config).config_eval->whitelist; - if (!it->head) { + if (!it) { return false; } diff --git a/src/sp_var_parser.c b/src/sp_var_parser.c index 55cbfc2..d0ae67c 100644 --- a/src/sp_var_parser.c +++ b/src/sp_var_parser.c @@ -1,6 +1,6 @@ #include "php_snuffleupagus.h" -static int parse_str_tokens(const char *str, const sp_conf_token token, +static sp_list_node *parse_str_tokens(const char *str, const sp_conf_token token, sp_list_node *tokens_list) { const char *cur_str = str; @@ -10,13 +10,13 @@ static int parse_str_tokens(const char *str, const sp_conf_token token, token_elm->pos = cur_str - str; token_elm->text_repr = token.text_repr; token_elm->type = token.type; - sp_list_insert(tokens_list, token_elm); + tokens_list = sp_list_insert(tokens_list, token_elm); cur_str += strlen(token.text_repr); } else { cur_str++; } } - return 0; + return tokens_list; } static bool is_var_name_valid(const char *name) { @@ -240,10 +240,9 @@ sp_tree *parse_var(const char *line) { if (!line) { return NULL; } - tokens_list = sp_list_new(); for (unsigned int i = 0; i < sizeof(delimiter_list) / sizeof(sp_conf_token); i++) { - parse_str_tokens(line, delimiter_list[i], tokens_list); + tokens_list = parse_str_tokens(line, delimiter_list[i], tokens_list); } tokens_list = sp_list_sort(tokens_list, cmp_tokens); tree = parse_tokens(line, tokens_list); -- cgit v1.3