diff options
author | emanuele-f <black.silver@hotmail.it> | 2019-10-08 10:12:41 +0200 |
---|---|---|
committer | emanuele-f <black.silver@hotmail.it> | 2019-10-08 10:23:00 +0200 |
commit | b2c8cb655c8d70dafe67bad8da8099a4e8c6a517 (patch) | |
tree | 1ccb7cc56a817419f21acaed2029b0a4d43797ce /src | |
parent | 4bdbf02c2d5eb871dca4ec620bb66fcc16a74af1 (diff) |
ndpi_load_hostname_category now performs strdup on the name argument
This simplifies the API as an application is not required to keep references to the strings to free
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_api.h | 4 | ||||
-rw-r--r-- | src/lib/ndpi_main.c | 26 |
2 files changed, 14 insertions, 16 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 6bf2d5779..37291d1b7 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -745,9 +745,9 @@ extern "C" { int ndpi_match_string(void *_automa, char *string_to_match); void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_struct, - char *ip_address_and_mask, ndpi_protocol_category_t category); + const char *ip_address_and_mask, ndpi_protocol_category_t category); int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_struct, - char *name, ndpi_protocol_category_t category); + const char *name_to_add, ndpi_protocol_category_t category); int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_struct); int ndpi_fill_ip_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t saddr, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 61fbbcd07..f3a23d90c 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2411,10 +2411,10 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_str) { free_hyperscan_memory(ndpi_str->custom_categories.hostnames); #else if(ndpi_str->custom_categories.hostnames.ac_automa != NULL) - ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 0); + ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 1 /* free patterns strings memory */); if(ndpi_str->custom_categories.hostnames_shadow.ac_automa != NULL) - ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa, 0); + ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa, 1 /* free patterns strings memory */); #endif if(ndpi_str->custom_categories.ipAddresses != NULL) @@ -4233,7 +4233,7 @@ void ndpi_process_extra_packet(struct ndpi_detection_module_struct *ndpi_str, /* ********************************************************************************* */ void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_str, - char *ip_address_and_mask, ndpi_protocol_category_t category) { + const char *ip_address_and_mask, ndpi_protocol_category_t category) { patricia_node_t *node; struct in_addr pin; int bits = 32; @@ -4263,16 +4263,14 @@ void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_str, /* ********************************************************************************* */ -/* - * - * IMPORTANT - * - * The *name pointer MUST be kept allocated until the automa is finalized and it - * cannot be recycled across multiple ndpi_load_hostname_category() calls - * - */ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_str, - char *name, ndpi_protocol_category_t category) { + const char *name_to_add, ndpi_protocol_category_t category) { + char *name; + + if(name_to_add == NULL) + return(-1); + + name = ndpi_strdup(name_to_add); if(name == NULL) return(-1); @@ -4286,7 +4284,7 @@ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_str, struct hs_list *h = (struct hs_list*)ndpi_malloc(sizeof(struct hs_list)); if(h) { - h->expression = ndpi_strdup(name), h->id = (unsigned int)category; + h->expression = name, h->id = (unsigned int)category; if(h->expression == NULL) { ndpi_free(h); return(-2); @@ -4398,7 +4396,7 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) } #else /* Free */ - ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 0); + ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 1 /* free patterns strings memory */); /* Finalize */ ac_automata_finalize((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa); |