From 3d1170031b340a231949fdc0d9c46d87af0d1b5d Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Thu, 24 Oct 2019 16:41:53 +0800 Subject: [PATCH] mdns: fix crash for hostname queries Receiving TXT, PTR, SDPTR and SRV record type queries would crash the application if the hostname was used as instance name. Closes https://github.com/espressif/esp-idf/issues/4224 --- components/mdns/mdns.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index d4a68963c4..0392b1fce3 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -445,6 +445,10 @@ static uint16_t _mdns_append_ptr_record(uint8_t * packet, uint16_t * index, cons uint16_t record_length = 0; uint8_t part_length; + if (service == NULL) { + return 0; + } + str[0] = instance; str[1] = service; str[2] = proto; @@ -489,6 +493,10 @@ static uint16_t _mdns_append_sdptr_record(uint8_t * packet, uint16_t * index, md uint16_t record_length = 0; uint8_t part_length; + if (service == NULL) { + return 0; + } + sd_str[0] = (char*)"_services"; sd_str[1] = (char*)"_dns-sd"; sd_str[2] = (char*)"_udp"; @@ -534,6 +542,10 @@ static uint16_t _mdns_append_txt_record(uint8_t * packet, uint16_t * index, mdns uint16_t record_length = 0; uint8_t part_length; + if (service == NULL) { + return 0; + } + str[0] = _mdns_get_service_instance_name(service); str[1] = service->service; str[2] = service->proto; @@ -602,6 +614,10 @@ static uint16_t _mdns_append_srv_record(uint8_t * packet, uint16_t * index, mdns uint16_t record_length = 0; uint8_t part_length; + if (service == NULL) { + return 0; + } + str[0] = _mdns_get_service_instance_name(service); str[1] = service->service; str[2] = service->proto; @@ -1151,6 +1167,7 @@ static bool _mdns_alloc_answer(mdns_out_answer_t ** destnation, uint16_t type, m } a->type = type; a->service = service; + a->custom_service = NULL; a->bye = bye; a->flush = flush; a->next = NULL;