From a0476c1f511868046339b0e7205f03856ad97e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Wed, 14 Aug 2019 20:29:54 +0200 Subject: [PATCH] Fix some Leaks --- lib/src/discovery.c | 13 ++++--------- lib/src/discoveryservice.c | 9 +++++++++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/src/discovery.c b/lib/src/discovery.c index f2641af..6ffa6c1 100644 --- a/lib/src/discovery.c +++ b/lib/src/discovery.c @@ -52,7 +52,7 @@ CHIAKI_EXPORT int chiaki_discovery_packet_fmt(char *buf, size_t buf_size, Chiaki } } -CHIAKI_EXPORT ChiakiErrorCode chiaki_discovery_srch_response_parse(ChiakiDiscoveryHost *response, struct sockaddr *addr, char *buf, size_t buf_size) +CHIAKI_EXPORT ChiakiErrorCode chiaki_discovery_srch_response_parse(ChiakiDiscoveryHost *response, struct sockaddr *addr, char *addr_buf, size_t addr_buf_size, char *buf, size_t buf_size) { ChiakiHttpResponse http_response; ChiakiErrorCode err = chiaki_http_response_parse(&http_response, buf, buf_size); @@ -61,10 +61,6 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_discovery_srch_response_parse(ChiakiDiscove memset(response, 0, sizeof(*response)); - size_t host_addr_str_size = 40; - char *host_addr_str = malloc(host_addr_str_size); - if(!host_addr_str) - return CHIAKI_ERR_MEMORY; void *addr_src; switch(addr->sa_family) { @@ -79,9 +75,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_discovery_srch_response_parse(ChiakiDiscove break; } if(addr_src) - response->host_addr = inet_ntop(addr->sa_family, addr_src, host_addr_str, host_addr_str_size); - if(!response->host_addr) - free(host_addr_str); + response->host_addr = inet_ntop(addr->sa_family, addr_src, addr_buf, addr_buf_size); switch(http_response.code) { @@ -267,8 +261,9 @@ static void *discovery_thread_func(void *user) CHIAKI_LOGV(discovery->log, "Discovery received:\n%s", buf); //chiaki_log_hexdump_raw(discovery->log, CHIAKI_LOG_VERBOSE, (const uint8_t *)buf, n); + char addr_buf[64]; ChiakiDiscoveryHost response; - err = chiaki_discovery_srch_response_parse(&response, &client_addr, buf, n); + err = chiaki_discovery_srch_response_parse(&response, &client_addr, addr_buf, sizeof(addr_buf), buf, n); if(err != CHIAKI_ERR_SUCCESS) { CHIAKI_LOGI(discovery->log, "Discovery Response invalid"); diff --git a/lib/src/discoveryservice.c b/lib/src/discoveryservice.c index 0dacc49..2373907 100644 --- a/lib/src/discoveryservice.c +++ b/lib/src/discoveryservice.c @@ -96,6 +96,15 @@ CHIAKI_EXPORT void chiaki_discovery_service_fini(ChiakiDiscoveryService *service chiaki_discovery_fini(&service->discovery); chiaki_mutex_fini(&service->state_mutex); free(service->options.send_addr); + + for(size_t i=0; ihosts_count; i++) + { + ChiakiDiscoveryHost *host = &service->hosts[i]; +#define FREE_STRING(name) free((char *)host->name); + CHIAKI_DISCOVERY_HOST_STRING_FOREACH(FREE_STRING) +#undef FREE_STRING + } + free(service->host_discovery_infos); free(service->hosts); }