aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ndpi_analyze.c
diff options
context:
space:
mode:
authorAlfredo Cardigliano <cardigliano@ntop.org>2021-07-05 15:09:48 +0200
committerAlfredo Cardigliano <cardigliano@ntop.org>2021-07-05 15:09:48 +0200
commit8e7b063804a2d1f2e88d0cb351e493a9100d8178 (patch)
tree0bbbf885793d1e7ca62b5f236db5574d40e6a662 /src/lib/ndpi_analyze.c
parent6f7acfcab559e54255e1253150110225829496c7 (diff)
Fix possible segfault/leak
Diffstat (limited to 'src/lib/ndpi_analyze.c')
-rw-r--r--src/lib/ndpi_analyze.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/lib/ndpi_analyze.c b/src/lib/ndpi_analyze.c
index 9b642ddd3..c745eb152 100644
--- a/src/lib/ndpi_analyze.c
+++ b/src/lib/ndpi_analyze.c
@@ -39,20 +39,16 @@
void ndpi_init_data_analysis(struct ndpi_analyze_struct *ret, u_int16_t _max_series_len) {
u_int32_t len;
- memset(ret, 0, sizeof(struct ndpi_analyze_struct));
+ memset(ret, 0, sizeof(*ret));
if(_max_series_len > MAX_SERIES_LEN) _max_series_len = MAX_SERIES_LEN;
ret->num_values_array_len = _max_series_len;
if(ret->num_values_array_len > 0) {
- len = sizeof(u_int32_t)*ret->num_values_array_len;
- if((ret->values = ndpi_malloc(len)) == NULL) {
- ndpi_free(ret);
- ret = NULL;
- } else
+ len = sizeof(u_int32_t) * ret->num_values_array_len;
+ if((ret->values = ndpi_malloc(len)) != NULL)
memset(ret->values, 0, len);
- } else
- ret->values = NULL;
+ }
}
/* ********************************************************************************* */
@@ -76,9 +72,15 @@ void ndpi_free_data_analysis(struct ndpi_analyze_struct *d, u_int8_t free_pointe
/* ********************************************************************************* */
void ndpi_reset_data_analysis(struct ndpi_analyze_struct *d) {
+ u_int32_t *values_bkp = d->values;
+ u_int32_t num_values_array_len_bpk = d->num_values_array_len;
+
memset(d, 0, sizeof(struct ndpi_analyze_struct));
+
+ d->values = values_bkp;
+ d->num_values_array_len = num_values_array_len_bpk;
+
memset(d->values, 0, sizeof(u_int32_t)*d->num_values_array_len);
- d->num_data_entries = 0;
}
/* ********************************************************************************* */