diff options
| author | simon MAGNIN-FEYSOT | 2018-01-17 19:25:08 +0100 |
|---|---|---|
| committer | jvoisin | 2018-01-17 19:25:08 +0100 |
| commit | b213c8e08b5624da9bb69dd05e132e247bab3082 (patch) | |
| tree | 70098ca8ea967138d4beb3a1f423e5beb2908fd3 | |
| parent | 05e4b7ea67e07bb82db2a37930b383d51500b341 (diff) | |
Remove useless "head" member in our linked lists implementation
This should close #85
| -rw-r--r-- | src/snuffleupagus.c | 14 | ||||
| -rw-r--r-- | src/sp_config_keywords.c | 23 | ||||
| -rw-r--r-- | src/sp_config_utils.c | 4 | ||||
| -rw-r--r-- | src/sp_disabled_functions.c | 2 | ||||
| -rw-r--r-- | src/sp_execute.c | 3 | ||||
| -rw-r--r-- | src/sp_list.c | 47 | ||||
| -rw-r--r-- | src/sp_list.h | 6 | ||||
| -rw-r--r-- | src/sp_utils.c | 2 | ||||
| -rw-r--r-- | src/sp_var_parser.c | 9 |
9 files changed, 45 insertions, 65 deletions
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) { | |||
| 79 | SP_INIT(snuffleupagus_globals->config.config_eval); | 79 | SP_INIT(snuffleupagus_globals->config.config_eval); |
| 80 | 80 | ||
| 81 | snuffleupagus_globals->config.config_disabled_constructs->construct_include = | 81 | snuffleupagus_globals->config.config_disabled_constructs->construct_include = |
| 82 | sp_list_new(); | 82 | NULL; |
| 83 | snuffleupagus_globals->config.config_disabled_constructs->construct_eval = | 83 | snuffleupagus_globals->config.config_disabled_constructs->construct_eval = |
| 84 | sp_list_new(); | 84 | NULL; |
| 85 | snuffleupagus_globals->config.config_disabled_functions->disabled_functions = | 85 | snuffleupagus_globals->config.config_disabled_functions->disabled_functions = |
| 86 | sp_list_new(); | 86 | NULL; |
| 87 | snuffleupagus_globals->config.config_disabled_functions_ret | 87 | snuffleupagus_globals->config.config_disabled_functions_ret |
| 88 | ->disabled_functions = sp_list_new(); | 88 | ->disabled_functions = NULL; |
| 89 | snuffleupagus_globals->config.config_cookie->cookies = sp_list_new(); | 89 | snuffleupagus_globals->config.config_cookie->cookies = NULL; |
| 90 | snuffleupagus_globals->config.config_eval->blacklist = sp_list_new(); | 90 | snuffleupagus_globals->config.config_eval->blacklist = NULL; |
| 91 | snuffleupagus_globals->config.config_eval->whitelist = sp_list_new(); | 91 | snuffleupagus_globals->config.config_eval->whitelist = NULL; |
| 92 | 92 | ||
| 93 | #undef SP_INIT | 93 | #undef SP_INIT |
| 94 | #undef SP_INIT_HT | 94 | #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) { | |||
| 102 | return parse_keywords(sp_config_funcs_global, line); | 102 | return parse_keywords(sp_config_funcs_global, line); |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | static int parse_eval_filter_conf(char *line, sp_list_node *list) { | 105 | static int parse_eval_filter_conf(char *line, sp_list_node **list) { |
| 106 | char *token; | 106 | char *token; |
| 107 | char *rest; | 107 | char *rest; |
| 108 | sp_config_functions sp_config_funcs[] = { | 108 | sp_config_functions sp_config_funcs[] = { |
| @@ -116,19 +116,19 @@ static int parse_eval_filter_conf(char *line, sp_list_node *list) { | |||
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | while ((token = strtok_r(rest, ",", &rest))) { | 118 | while ((token = strtok_r(rest, ",", &rest))) { |
| 119 | sp_list_insert(list, token); | 119 | *list = sp_list_insert(*list, token); |
| 120 | } | 120 | } |
| 121 | return SUCCESS; | 121 | return SUCCESS; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | int parse_eval_blacklist(char *line) { | 124 | int parse_eval_blacklist(char *line) { |
| 125 | return parse_eval_filter_conf(line, | 125 | return parse_eval_filter_conf(line, |
| 126 | SNUFFLEUPAGUS_G(config).config_eval->blacklist); | 126 | &SNUFFLEUPAGUS_G(config).config_eval->blacklist); |
| 127 | } | 127 | } |
| 128 | 128 | ||
| 129 | int parse_eval_whitelist(char *line) { | 129 | int parse_eval_whitelist(char *line) { |
| 130 | return parse_eval_filter_conf(line, | 130 | return parse_eval_filter_conf(line, |
| 131 | SNUFFLEUPAGUS_G(config).config_eval->whitelist); | 131 | &SNUFFLEUPAGUS_G(config).config_eval->whitelist); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | int parse_cookie(char *line) { | 134 | int parse_cookie(char *line) { |
| @@ -204,7 +204,8 @@ int parse_cookie(char *line) { | |||
| 204 | return -1; | 204 | return -1; |
| 205 | } | 205 | } |
| 206 | } | 206 | } |
| 207 | sp_list_insert(SNUFFLEUPAGUS_G(config).config_cookie->cookies, cookie); | 207 | SNUFFLEUPAGUS_G(config).config_cookie->cookies = sp_list_insert( |
| 208 | SNUFFLEUPAGUS_G(config).config_cookie->cookies, cookie); | ||
| 208 | return SUCCESS; | 209 | return SUCCESS; |
| 209 | } | 210 | } |
| 210 | 211 | ||
| @@ -371,12 +372,12 @@ int parse_disabled_functions(char *line) { | |||
| 371 | 372 | ||
| 372 | switch (get_construct_type(df)) { | 373 | switch (get_construct_type(df)) { |
| 373 | case ZEND_INCLUDE_OR_EVAL: | 374 | case ZEND_INCLUDE_OR_EVAL: |
| 374 | sp_list_insert( | 375 | SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_include = sp_list_insert( |
| 375 | SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_include, | 376 | SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_include, |
| 376 | df); | 377 | df); |
| 377 | return ret; | 378 | return ret; |
| 378 | case ZEND_EVAL_CODE: | 379 | case ZEND_EVAL_CODE: |
| 379 | sp_list_insert( | 380 | SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_eval = sp_list_insert( |
| 380 | SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_eval, | 381 | SNUFFLEUPAGUS_G(config).config_disabled_constructs->construct_eval, |
| 381 | df); | 382 | df); |
| 382 | return ret; | 383 | return ret; |
| @@ -390,11 +391,11 @@ int parse_disabled_functions(char *line) { | |||
| 390 | } | 391 | } |
| 391 | 392 | ||
| 392 | if (df->ret || df->r_ret || df->ret_type) { | 393 | if (df->ret || df->r_ret || df->ret_type) { |
| 393 | sp_list_insert(SNUFFLEUPAGUS_G(config) | 394 | SNUFFLEUPAGUS_G(config).config_disabled_functions_ret->disabled_functions = sp_list_insert( |
| 394 | .config_disabled_functions_ret->disabled_functions, | 395 | SNUFFLEUPAGUS_G(config).config_disabled_functions_ret->disabled_functions, |
| 395 | df); | 396 | df); |
| 396 | } else { | 397 | } else { |
| 397 | sp_list_insert( | 398 | SNUFFLEUPAGUS_G(config).config_disabled_functions->disabled_functions = sp_list_insert( |
| 398 | SNUFFLEUPAGUS_G(config).config_disabled_functions->disabled_functions, | 399 | SNUFFLEUPAGUS_G(config).config_disabled_functions->disabled_functions, |
| 399 | df); | 400 | df); |
| 400 | } | 401 | } |
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) { | |||
| 105 | return NULL; | 105 | return NULL; |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | sp_list_node *list = sp_list_new(); | 108 | sp_list_node *list = NULL; |
| 109 | char *tmp = strdup(value); | 109 | char *tmp = strdup(value); |
| 110 | char *function_name; | 110 | char *function_name; |
| 111 | char *next_token = tmp; | 111 | char *next_token = tmp; |
| 112 | while ((function_name = strtok_r(NULL, sep, &next_token))) { | 112 | while ((function_name = strtok_r(NULL, sep, &next_token))) { |
| 113 | sp_list_prepend(list, strdup(function_name)); | 113 | list = sp_list_prepend(list, strdup(function_name)); |
| 114 | } | 114 | } |
| 115 | free(tmp); | 115 | free(tmp); |
| 116 | 116 | ||
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) { | |||
| 501 | ret |= hook_functions(SNUFFLEUPAGUS_G(config) | 501 | ret |= hook_functions(SNUFFLEUPAGUS_G(config) |
| 502 | .config_disabled_functions_ret->disabled_functions); | 502 | .config_disabled_functions_ret->disabled_functions); |
| 503 | 503 | ||
| 504 | if (NULL != SNUFFLEUPAGUS_G(config).config_eval->blacklist->data) { | 504 | if (NULL != SNUFFLEUPAGUS_G(config).config_eval->blacklist) { |
| 505 | sp_list_node* it = SNUFFLEUPAGUS_G(config).config_eval->blacklist; | 505 | sp_list_node* it = SNUFFLEUPAGUS_G(config).config_eval->blacklist; |
| 506 | 506 | ||
| 507 | while (it) { | 507 | 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) { | |||
| 50 | return; | 50 | return; |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | if (EXPECTED(NULL == SNUFFLEUPAGUS_G(config).config_eval->whitelist->data)) { | 53 | if (EXPECTED(NULL == SNUFFLEUPAGUS_G(config).config_eval->whitelist || |
| 54 | NULL == SNUFFLEUPAGUS_G(config).config_eval->whitelist->data)) { | ||
| 54 | return; | 55 | return; |
| 55 | } | 56 | } |
| 56 | 57 | ||
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) { | |||
| 11 | } | 11 | } |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | sp_list_node *sp_list_new() { | ||
| 15 | sp_list_node *new = pecalloc(sizeof(*new), 1, 1); | ||
| 16 | new->next = new->data = new->head = NULL; | ||
| 17 | return new; | ||
| 18 | } | ||
| 19 | |||
| 20 | // Thanks to https://en.wikipedia.org/wiki/Insertion_sort :> | 14 | // Thanks to https://en.wikipedia.org/wiki/Insertion_sort :> |
| 21 | sp_list_node *sp_list_sort(sp_list_node *pList, | 15 | sp_list_node *sp_list_sort(sp_list_node *pList, |
| 22 | int (*cmp_func)(sp_list_node *, sp_list_node *)) { | 16 | int (*cmp_func)(sp_list_node *, sp_list_node *)) { |
| @@ -46,39 +40,26 @@ sp_list_node *sp_list_sort(sp_list_node *pList, | |||
| 46 | return head; | 40 | return head; |
| 47 | } | 41 | } |
| 48 | 42 | ||
| 49 | void sp_list_insert(sp_list_node *list, void *data) { | 43 | sp_list_node *sp_list_insert(sp_list_node *list, void *data) { |
| 50 | if (list->head == NULL) { | 44 | sp_list_node *new = pecalloc(sizeof(*new), 1, 1); |
| 51 | list->data = data; | 45 | sp_list_node *origin = list; |
| 52 | list->next = NULL; | 46 | new->data = data; |
| 53 | list->head = list; | 47 | new->next = NULL; |
| 54 | } else { | ||
| 55 | sp_list_node *new = pecalloc(sizeof(*new), 1, 1); | ||
| 56 | |||
| 57 | new->data = data; | ||
| 58 | new->next = NULL; | ||
| 59 | new->head = list; | ||
| 60 | 48 | ||
| 49 | if (list == NULL) { | ||
| 50 | origin = new; | ||
| 51 | } else { | ||
| 61 | while (list->next) { | 52 | while (list->next) { |
| 62 | list = list->next; | 53 | list = list->next; |
| 63 | } | 54 | } |
| 64 | list->next = new; | 55 | list->next = new; |
| 65 | } | 56 | } |
| 57 | return origin; | ||
| 66 | } | 58 | } |
| 67 | 59 | ||
| 68 | void sp_list_prepend(sp_list_node *list, void *data) { | 60 | sp_list_node *sp_list_prepend(sp_list_node *list, void *data) { |
| 69 | if (list->head == NULL) { | 61 | sp_list_node *new = pecalloc(sizeof(*new), 1, 1); |
| 70 | list->data = data; | 62 | new->next = list; |
| 71 | list->next = NULL; | 63 | new->data = data; |
| 72 | list->head = list; | 64 | return new; |
| 73 | } else { | ||
| 74 | sp_list_node *new = pecalloc(sizeof(*new), 1, 1); | ||
| 75 | |||
| 76 | new->next = list->next; | ||
| 77 | list->next = new; | ||
| 78 | |||
| 79 | new->head = list; | ||
| 80 | |||
| 81 | new->data = list->data; | ||
| 82 | list->data = data; | ||
| 83 | } | ||
| 84 | } | 65 | } |
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 @@ | |||
| 3 | 3 | ||
| 4 | typedef struct sp_node_s { | 4 | typedef struct sp_node_s { |
| 5 | struct sp_node_s *next; | 5 | struct sp_node_s *next; |
| 6 | struct sp_node_s *head; | ||
| 7 | void *data; | 6 | void *data; |
| 8 | 7 | ||
| 9 | } sp_list_node; | 8 | } sp_list_node; |
| 10 | 9 | ||
| 11 | sp_list_node *sp_list_new(); | ||
| 12 | sp_list_node *sp_list_sort(sp_list_node *, | 10 | sp_list_node *sp_list_sort(sp_list_node *, |
| 13 | int (*)(sp_list_node *, sp_list_node *)); | 11 | int (*)(sp_list_node *, sp_list_node *)); |
| 14 | void sp_list_insert(sp_list_node *, void *); | 12 | sp_list_node *sp_list_insert(sp_list_node *, void *); |
| 13 | sp_list_node *sp_list_prepend(sp_list_node *, void *); | ||
| 15 | void sp_list_free(sp_list_node *); | 14 | void sp_list_free(sp_list_node *); |
| 16 | void sp_list_prepend(sp_list_node *, void *); | ||
| 17 | 15 | ||
| 18 | #endif | 16 | #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, | |||
| 397 | bool check_is_in_eval_whitelist(const char* const function_name) { | 397 | bool check_is_in_eval_whitelist(const char* const function_name) { |
| 398 | const sp_list_node* it = SNUFFLEUPAGUS_G(config).config_eval->whitelist; | 398 | const sp_list_node* it = SNUFFLEUPAGUS_G(config).config_eval->whitelist; |
| 399 | 399 | ||
| 400 | if (!it->head) { | 400 | if (!it) { |
| 401 | return false; | 401 | return false; |
| 402 | } | 402 | } |
| 403 | 403 | ||
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 @@ | |||
| 1 | #include "php_snuffleupagus.h" | 1 | #include "php_snuffleupagus.h" |
| 2 | 2 | ||
| 3 | static int parse_str_tokens(const char *str, const sp_conf_token token, | 3 | static sp_list_node *parse_str_tokens(const char *str, const sp_conf_token token, |
| 4 | sp_list_node *tokens_list) { | 4 | sp_list_node *tokens_list) { |
| 5 | const char *cur_str = str; | 5 | const char *cur_str = str; |
| 6 | 6 | ||
| @@ -10,13 +10,13 @@ static int parse_str_tokens(const char *str, const sp_conf_token token, | |||
| 10 | token_elm->pos = cur_str - str; | 10 | token_elm->pos = cur_str - str; |
| 11 | token_elm->text_repr = token.text_repr; | 11 | token_elm->text_repr = token.text_repr; |
| 12 | token_elm->type = token.type; | 12 | token_elm->type = token.type; |
| 13 | sp_list_insert(tokens_list, token_elm); | 13 | tokens_list = sp_list_insert(tokens_list, token_elm); |
| 14 | cur_str += strlen(token.text_repr); | 14 | cur_str += strlen(token.text_repr); |
| 15 | } else { | 15 | } else { |
| 16 | cur_str++; | 16 | cur_str++; |
| 17 | } | 17 | } |
| 18 | } | 18 | } |
| 19 | return 0; | 19 | return tokens_list; |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | static bool is_var_name_valid(const char *name) { | 22 | static bool is_var_name_valid(const char *name) { |
| @@ -240,10 +240,9 @@ sp_tree *parse_var(const char *line) { | |||
| 240 | if (!line) { | 240 | if (!line) { |
| 241 | return NULL; | 241 | return NULL; |
| 242 | } | 242 | } |
| 243 | tokens_list = sp_list_new(); | ||
| 244 | for (unsigned int i = 0; i < sizeof(delimiter_list) / sizeof(sp_conf_token); | 243 | for (unsigned int i = 0; i < sizeof(delimiter_list) / sizeof(sp_conf_token); |
| 245 | i++) { | 244 | i++) { |
| 246 | parse_str_tokens(line, delimiter_list[i], tokens_list); | 245 | tokens_list = parse_str_tokens(line, delimiter_list[i], tokens_list); |
| 247 | } | 246 | } |
| 248 | tokens_list = sp_list_sort(tokens_list, cmp_tokens); | 247 | tokens_list = sp_list_sort(tokens_list, cmp_tokens); |
| 249 | tree = parse_tokens(line, tokens_list); | 248 | tree = parse_tokens(line, tokens_list); |
