From a0d9f00d8d76bb07847abb2f837f7c629fb238b2 Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Tue, 24 Nov 2020 15:13:49 +0100 Subject: [PATCH] APL records: fix endianness problem. Closes #9763 --- pdns/dnsrecords.cc | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/pdns/dnsrecords.cc b/pdns/dnsrecords.cc index 8a15c9f58f..4d435bae0b 100644 --- a/pdns/dnsrecords.cc +++ b/pdns/dnsrecords.cc @@ -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"); } -- 2.47.2