Explorar o código

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
Marius Vikhammer %!s(int64=6) %!d(string=hai) anos
pai
achega
5e042803a2
Modificáronse 1 ficheiros con 17 adicións e 0 borrados
  1. 17 0
      components/mdns/mdns.c

+ 17 - 0
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;