]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
APL records: fix endianness problem. Closes #9763 9774/head
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Tue, 24 Nov 2020 14:13:49 +0000 (15:13 +0100)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 25 Nov 2020 11:07:48 +0000 (12:07 +0100)
(cherry picked from commit a0d9f00d8d76bb07847abb2f837f7c629fb238b2)

pdns/dnsrecords.cc

index 04613000f23b113a603ef970f8efd9c599192eaf..8f01d7e3531219743bd4e8a00b4d15244bf15d1e 100644 (file)
@@ -679,20 +679,13 @@ string APLRecordContent::getZoneRepresentation(bool noDot) const {
     if (ard->d_family == APL_FAMILY_IPV4) { // IPv4
       s_family = std::to_string(APL_FAMILY_IPV4);
       ca = ComboAddress();
-      for (int i=0; i < 4; i++) {
-          ca.sin4.sin_addr.s_addr |= ard->d_ip.d_ip4[i] << (i*8);
-      }
+      memcpy(&ca.sin4.sin_addr.s_addr, ard->d_ip.d_ip4, sizeof(ca.sin4.sin_addr.s_addr));
     } else if (ard->d_family == APL_FAMILY_IPV6) { // IPv6
       s_family = std::to_string(APL_FAMILY_IPV6);
       ca = ComboAddress();
       ca.sin4.sin_family = AF_INET6;
-      for (int i=0; i < 16; i++) {
-        if (i < ard->d_afdlength) {
-          ca.sin6.sin6_addr.s6_addr[i] = ard->d_ip.d_ip6[i];
-        } else {
-          ca.sin6.sin6_addr.s6_addr[i] = 0;
-        }
-      }
+      memset(&ca.sin6.sin6_addr.s6_addr, 0, sizeof(ca.sin6.sin6_addr.s6_addr));
+      memcpy(&ca.sin6.sin6_addr.s6_addr, ard->d_ip.d_ip6, ard->d_afdlength);
     } else {
       throw MOADNSException("Asked to decode APL record but got unknown Address Family");
     }