From c588263b45a4de67dd41a6eea0b32a92009ed29e Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 17 Jan 2022 08:31:16 +0100 Subject: [PATCH] mdns: Fix minor memory leaks when creating services * Original commit: espressif/esp-idf@fad62cc1ed3dce63b58297172a72a489d7af2d9d --- components/mdns/mdns.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 0c2b0b6f3..67946d8b9 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -2265,6 +2265,11 @@ static mdns_txt_linked_item_t * _mdns_allocate_txt(size_t num_items, mdns_txt_it } return new_txt; } + +/** + * @brief Deallocate the txt linked list + * @param txt pointer to the txt pointer to free, noop if txt==NULL + */ static void _mdns_free_linked_txt(mdns_txt_linked_item_t *txt) { mdns_txt_linked_item_t *t; @@ -2293,7 +2298,7 @@ static mdns_service_t * _mdns_create_service(const char * service, const char * uint16_t port, const char * instance, size_t num_items, mdns_txt_item_t txt[]) { - mdns_service_t * s = (mdns_service_t *)malloc(sizeof(mdns_service_t)); + mdns_service_t * s = (mdns_service_t *)calloc(1, sizeof(mdns_service_t)); if (!s) { HOOK_MALLOC_FAILED; return NULL; @@ -2301,8 +2306,7 @@ static mdns_service_t * _mdns_create_service(const char * service, const char * mdns_txt_linked_item_t * new_txt = _mdns_allocate_txt(num_items, txt); if (num_items && new_txt == NULL) { - free(s); - return NULL; + goto fail; } s->priority = 0; @@ -2328,19 +2332,16 @@ static mdns_service_t * _mdns_create_service(const char * service, const char * s->proto = strndup(proto, MDNS_NAME_BUF_LEN - 1); if (!s->proto) { - free((char *)s->service); goto fail; } - return s; fail: - if (s->instance) { - free(s->instance); - } - if (s->hostname) { - free(s->hostname); - } + _mdns_free_linked_txt(s->txt); + free((char *)s->instance); + free((char *)s->service); + free((char *)s->proto); + free((char *)s->hostname); free(s); return NULL;