From eab3fb2fd6e6e827327a4971b3371fb67a7d8600 Mon Sep 17 00:00:00 2001 From: Ben Foster Date: Wed, 25 Oct 2017 22:13:17 +0100 Subject: Free `config_disabled_constructs` In reference to #43. --- src/snuffleupagus.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 01bc4f6..1c0455f 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -122,6 +122,8 @@ PHP_MSHUTDOWN_FUNCTION(snuffleupagus) { pefree(SNUFFLEUPAGUS_G(config.config_disabled_functions), 1); sp_list_free(SNUFFLEUPAGUS_G(config.config_disabled_functions_ret->disabled_functions)); pefree(SNUFFLEUPAGUS_G(config.config_disabled_functions_ret), 1); + sp_list_free(SNUFFLEUPAGUS_G(config.config_disabled_constructs->construct_include)); + pefree(SNUFFLEUPAGUS_G(config.config_disabled_constructs), 1); UNREGISTER_INI_ENTRIES(); -- cgit v1.3 From 59b3db273e6e628afb188681e178ea53d571b03d Mon Sep 17 00:00:00 2001 From: Ben Foster Date: Wed, 25 Oct 2017 22:25:30 +0100 Subject: Renames `sp_new_list` -> `sp_list_new` To be consistent with the rest of the `sp_list` functions. --- src/snuffleupagus.c | 6 +++--- src/sp_config_keywords.c | 4 ++-- src/sp_config_utils.c | 4 ++-- src/sp_list.c | 4 ++-- src/sp_list.h | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 1c0455f..2cc31d8 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -82,9 +82,9 @@ PHP_GINIT_FUNCTION(snuffleupagus) { SP_INIT(snuffleupagus_globals->config.config_cookie_encryption); SP_INIT(snuffleupagus_globals->config.config_disabled_constructs); - snuffleupagus_globals->config.config_disabled_constructs->construct_include = sp_new_list(); - snuffleupagus_globals->config.config_disabled_functions->disabled_functions = sp_new_list(); - snuffleupagus_globals->config.config_disabled_functions_ret->disabled_functions = sp_new_list(); + snuffleupagus_globals->config.config_disabled_constructs->construct_include = sp_list_new(); + snuffleupagus_globals->config.config_disabled_functions->disabled_functions = sp_list_new(); + snuffleupagus_globals->config.config_disabled_functions_ret->disabled_functions = sp_list_new(); SP_INIT_HT(snuffleupagus_globals->config.config_cookie_encryption->names); diff --git a/src/sp_config_keywords.c b/src/sp_config_keywords.c index 3101ee1..569542c 100644 --- a/src/sp_config_keywords.c +++ b/src/sp_config_keywords.c @@ -259,7 +259,7 @@ int parse_disabled_functions(char *line) { } if (df->param && strchr(df->param, '[')) { // assume that this is an array - df->param_array_keys = sp_new_list(); + df->param_array_keys = sp_list_new(); if (0 != array_to_list(&df->param, &df->param_array_keys)) { pefree(df->param_array_keys, 1); return -1; @@ -268,7 +268,7 @@ int parse_disabled_functions(char *line) { } if (df->var && strchr(df->var, '[')) { // assume that this is an array - df->var_array_keys = sp_new_list(); + df->var_array_keys = sp_list_new(); if (0 != array_to_list(&df->var, &df->var_array_keys)) { pefree(df->var_array_keys, 1); return -1; diff --git a/src/sp_config_utils.c b/src/sp_config_utils.c index 62fb7c1..2e97ba8 100644 --- a/src/sp_config_utils.c +++ b/src/sp_config_utils.c @@ -179,7 +179,7 @@ zend_always_inline sp_node_t *parse_functions_list(char *value) { return NULL; } - sp_node_t *list = sp_new_list(); + sp_node_t *list = sp_list_new(); char* tmp = strdup(value); char* function_name; char *next_token = tmp; @@ -189,4 +189,4 @@ zend_always_inline sp_node_t *parse_functions_list(char *value) { free(tmp); return list; -} \ No newline at end of file +} diff --git a/src/sp_list.c b/src/sp_list.c index 112d822..c671f51 100644 --- a/src/sp_list.c +++ b/src/sp_list.c @@ -11,7 +11,7 @@ void sp_list_free(sp_node_t *node) { } } -sp_node_t *sp_new_list() { +sp_node_t *sp_list_new() { sp_node_t *new = pecalloc(sizeof(*new), 1, 1); new->next = new->data = new->head = NULL; return new; @@ -52,4 +52,4 @@ void sp_list_prepend(sp_node_t *list, void *data) { new->data = list->data; list->data = data; } -} \ No newline at end of file +} diff --git a/src/sp_list.h b/src/sp_list.h index 476c64c..dda139f 100644 --- a/src/sp_list.h +++ b/src/sp_list.h @@ -8,7 +8,7 @@ typedef struct sp_node_s { } sp_node_t; -sp_node_t *sp_new_list(); +sp_node_t *sp_list_new(); void sp_list_insert(sp_node_t *, void *); void sp_list_free(sp_node_t *); void sp_list_prepend(sp_node_t *, void *); -- cgit v1.3 From 1eb51a18ec06b3c8add77d876af0f5a599279c67 Mon Sep 17 00:00:00 2001 From: Ben Foster Date: Wed, 25 Oct 2017 23:53:07 +0100 Subject: Free additionally allocated `sp_list` instances References #43. --- src/snuffleupagus.c | 16 +++++++++++++--- src/sp_config.c | 10 ++++++++++ src/sp_config.h | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 2cc31d8..7db6c93 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -3,6 +3,7 @@ #endif #include "php_snuffleupagus.h" +#include "sp_config.h" #ifndef ZEND_EXT_API #define ZEND_EXT_API ZEND_DLEXPORT @@ -118,11 +119,20 @@ PHP_MSHUTDOWN_FUNCTION(snuffleupagus) { pefree(SNUFFLEUPAGUS_G(config.config_upload_validation), 1); pefree(SNUFFLEUPAGUS_G(config.config_cookie_encryption), 1); - sp_list_free(SNUFFLEUPAGUS_G(config.config_disabled_functions->disabled_functions)); + sp_node_t* disabled_functions = SNUFFLEUPAGUS_G(config.config_disabled_functions->disabled_functions); + sp_node_t* disabled_functions_ret = SNUFFLEUPAGUS_G(config.config_disabled_functions_ret->disabled_functions); + sp_node_t* disabled_constructs = SNUFFLEUPAGUS_G(config.config_disabled_constructs->construct_include); + + // Free the list of disabled functions for each `sp_disabled_function` instance + sp_disabled_function_list_free(disabled_functions); + sp_disabled_function_list_free(disabled_functions_ret); + sp_disabled_function_list_free(disabled_constructs); + + sp_list_free(disabled_functions); pefree(SNUFFLEUPAGUS_G(config.config_disabled_functions), 1); - sp_list_free(SNUFFLEUPAGUS_G(config.config_disabled_functions_ret->disabled_functions)); + sp_list_free(disabled_functions_ret); pefree(SNUFFLEUPAGUS_G(config.config_disabled_functions_ret), 1); - sp_list_free(SNUFFLEUPAGUS_G(config.config_disabled_constructs->construct_include)); + sp_list_free(disabled_constructs); pefree(SNUFFLEUPAGUS_G(config.config_disabled_constructs), 1); UNREGISTER_INI_ENTRIES(); diff --git a/src/sp_config.c b/src/sp_config.c index c41b8f7..13002cc 100644 --- a/src/sp_config.c +++ b/src/sp_config.c @@ -182,3 +182,13 @@ int sp_parse_config(const char *conf_file) { fclose(fd); return SUCCESS; } + +void sp_disabled_function_list_free(sp_node_t* list) { + sp_node_t* cursor = list; + while(cursor) { + sp_disabled_function* df = cursor->data; + if (df && df->functions_list) + sp_list_free(df->functions_list); + cursor = cursor->next; + } +} diff --git a/src/sp_config.h b/src/sp_config.h index eda7517..ac33eb5 100644 --- a/src/sp_config.h +++ b/src/sp_config.h @@ -206,5 +206,7 @@ int parse_empty(char *restrict, char *restrict, void *); int parse_cidr(char *restrict, char *restrict, void *); int parse_php_type(char *restrict, char *restrict, void *); +// cleanup +void sp_disabled_function_list_free(sp_node_t*); #endif /* SP_CONFIG_H */ -- cgit v1.3