@@ -2265,6 +2265,11 @@ static mdns_txt_linked_item_t * _mdns_allocate_txt(size_t num_items, mdns_txt_it
2265
2265
}
2266
2266
return new_txt ;
2267
2267
}
2268
+
2269
+ /**
2270
+ * @brief Deallocate the txt linked list
2271
+ * @param txt pointer to the txt pointer to free, noop if txt==NULL
2272
+ */
2268
2273
static void _mdns_free_linked_txt (mdns_txt_linked_item_t * txt )
2269
2274
{
2270
2275
mdns_txt_linked_item_t * t ;
@@ -2293,16 +2298,15 @@ static mdns_service_t * _mdns_create_service(const char * service, const char *
2293
2298
uint16_t port , const char * instance , size_t num_items ,
2294
2299
mdns_txt_item_t txt [])
2295
2300
{
2296
- mdns_service_t * s = (mdns_service_t * )malloc ( sizeof (mdns_service_t ));
2301
+ mdns_service_t * s = (mdns_service_t * )calloc ( 1 , sizeof (mdns_service_t ));
2297
2302
if (!s ) {
2298
2303
HOOK_MALLOC_FAILED ;
2299
2304
return NULL ;
2300
2305
}
2301
2306
2302
2307
mdns_txt_linked_item_t * new_txt = _mdns_allocate_txt (num_items , txt );
2303
2308
if (num_items && new_txt == NULL ) {
2304
- free (s );
2305
- return NULL ;
2309
+ goto fail ;
2306
2310
}
2307
2311
2308
2312
s -> priority = 0 ;
@@ -2328,19 +2332,16 @@ static mdns_service_t * _mdns_create_service(const char * service, const char *
2328
2332
2329
2333
s -> proto = strndup (proto , MDNS_NAME_BUF_LEN - 1 );
2330
2334
if (!s -> proto ) {
2331
- free ((char * )s -> service );
2332
2335
goto fail ;
2333
2336
}
2334
-
2335
2337
return s ;
2336
2338
2337
2339
fail :
2338
- if (s -> instance ) {
2339
- free (s -> instance );
2340
- }
2341
- if (s -> hostname ) {
2342
- free (s -> hostname );
2343
- }
2340
+ _mdns_free_linked_txt (s -> txt );
2341
+ free ((char * )s -> instance );
2342
+ free ((char * )s -> service );
2343
+ free ((char * )s -> proto );
2344
+ free ((char * )s -> hostname );
2344
2345
free (s );
2345
2346
2346
2347
return NULL ;
0 commit comments