]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
APL records: fix endianness problem. Closes #9763 9766/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>
Tue, 24 Nov 2020 15:55:06 +0000 (16:55 +0100)
pdns/dnsrecords.cc

index 8a15c9f58fbcc4ea16f17fc155fa0866c2c4391f..4d435bae0bc93ab85d82a310cccb40dbb91062e1 100644 (file)
@@ -694,20 +694,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");
     }