Fix potential misaligned ipv6 result records from DNS search
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 22 Nov 2015 00:29:16 +0000 (00:29 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 26 Nov 2015 18:38:47 +0000 (18:38 +0000)
src/src/dns.c
src/src/host.c

index 27ab2d2a237984469a17f990392734c03d2a980c..9859e83658839600f42df07a7595575194a8f136 100644 (file)
@@ -1112,8 +1112,7 @@ return DNS_FAIL;
 *          Get address(es) from DNS record       *
 *************************************************/
 
-/* The record type is either T_A for an IPv4 address or T_AAAA (or T_A6 when
-supported) for an IPv6 address.
+/* The record type is either T_A for an IPv4 address or T_AAAA for an IPv6 address.
 
 Argument:
   dnsa       the DNS answer block
@@ -1145,8 +1144,11 @@ else
   {
   if (rr->data + 16 <= dnsa_lim)
     {
+    struct in6_addr in6;
+    int i;
+    for (i = 0; i < 16; i++) in6.__in6_u.__u6_addr8[i] = rr->data[i];
     yield = store_get(sizeof(dns_address) + 50);
-    inet_ntop(AF_INET6, US rr->data, CS yield->address, 50);
+    inet_ntop(AF_INET6, &in6, CS yield->address, 50);
     yield->next = NULL;
     }
   }
index 67d33a9b8730197f7c555e10de3394c381b47cb9..4099a750643328d0483aad59763b72692987852f 100644 (file)
@@ -2408,10 +2408,7 @@ for (; i >= 0; i--)
     {
     if (rr->type == type)
       {
-      /* dns_address *da = dns_address_from_rr(&dnsa, rr); */
-
-      dns_address *da;
-      da = dns_address_from_rr(&dnsa, rr);
+      dns_address *da = dns_address_from_rr(&dnsa, rr);
 
       DEBUG(D_host_lookup)
         if (!da) debug_printf("no addresses extracted from A6 RR for %s\n",