aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoremanuele-f <black.silver@hotmail.it>2019-10-08 10:12:41 +0200
committeremanuele-f <black.silver@hotmail.it>2019-10-08 10:23:00 +0200
commitb2c8cb655c8d70dafe67bad8da8099a4e8c6a517 (patch)
tree1ccb7cc56a817419f21acaed2029b0a4d43797ce /src
parent4bdbf02c2d5eb871dca4ec620bb66fcc16a74af1 (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.h4
-rw-r--r--src/lib/ndpi_main.c26
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);