From e94215443bb2282fe34b0744866bdfdbfc3bdedd 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 0f52ecf8e..de8f79a81 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -441,6 +441,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; @@ -485,6 +489,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"; @@ -530,6 +538,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; @@ -598,6 +610,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; @@ -1147,6 +1163,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;