diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index c052a1ae1..0c2b0b6f3 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -2315,9 +2315,7 @@ static mdns_service_t * _mdns_create_service(const char * service, const char * if (hostname) { s->hostname = strndup(hostname, MDNS_NAME_BUF_LEN - 1); if (!s->hostname) { - free((char *)s->instance); - free(s); - return NULL; + goto fail; } } else { s->hostname = NULL; @@ -2325,20 +2323,27 @@ static mdns_service_t * _mdns_create_service(const char * service, const char * s->service = strndup(service, MDNS_NAME_BUF_LEN - 1); if (!s->service) { - free((char *)s->instance); - free(s); - return NULL; + goto fail; } s->proto = strndup(proto, MDNS_NAME_BUF_LEN - 1); if (!s->proto) { - free((char *)s->instance); free((char *)s->service); - free(s); - return NULL; + goto fail; } return s; + +fail: + if (s->instance) { + free(s->instance); + } + if (s->hostname) { + free(s->hostname); + } + free(s); + + return NULL; } /**