diff options
author | Luca Deri <deri@ntop.org> | 2019-10-08 11:36:11 +0200 |
---|---|---|
committer | Luca Deri <deri@ntop.org> | 2019-10-08 11:36:11 +0200 |
commit | 256858d2e5d9db3777ccb113ed75bcd836fc8d16 (patch) | |
tree | dd21dffc7510f2fe4989676732511bbb911230f2 /src | |
parent | 10873bfe3564b52561f692400ad51fc9923e0b14 (diff) | |
parent | e939f1c1d1bfa744d430e64305010bf918c5dfbe (diff) |
Merge branch 'dev' of https://github.com/ntop/nDPI into dev
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_api.h | 4 | ||||
-rw-r--r-- | src/lib/ndpi_main.c | 46 |
2 files changed, 25 insertions, 25 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 25318c9cd..e5c52610e 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 5606875f6..cc1d48f7b 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) @@ -4232,7 +4232,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; @@ -4262,16 +4262,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); @@ -4285,30 +4283,32 @@ 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; - if(h->expression == NULL) { - ndpi_free(h); - return(-2); - } - + h->expression = name, h->id = (unsigned int)category; h->next = ndpi_str->custom_categories.to_load; ndpi_str->custom_categories.to_load = h; ndpi_str->custom_categories.num_to_load++; - } else - return(-1); + } else { + free(name); + return(-1); + } } #else AC_PATTERN_t ac_pattern; memset(&ac_pattern, 0, sizeof(ac_pattern)); - if(ndpi_str->custom_categories.hostnames_shadow.ac_automa == NULL) + if(ndpi_str->custom_categories.hostnames_shadow.ac_automa == NULL) { + free(name); return(-1); + } ac_pattern.astring = name, ac_pattern.length = strlen(ac_pattern.astring); ac_pattern.rep.number = (int)category; - ac_automata_add(ndpi_str->custom_categories.hostnames_shadow.ac_automa, &ac_pattern); + if(ac_automata_add(ndpi_str->custom_categories.hostnames_shadow.ac_automa, &ac_pattern) != ACERR_SUCCESS) { + free(name); + return(-1); + } #endif return(0); @@ -4397,7 +4397,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); |