From: Otto Moerbeek Date: Thu, 24 Oct 2024 12:17:48 +0000 (+0200) Subject: Refactor prompted by CodeQL X-Git-Tag: rec-5.2.0-alpha1~12^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c83e44dc99dfca7b30f26edee23a43d0ef3c34a;p=thirdparty%2Fpdns.git Refactor prompted by CodeQL --- diff --git a/pdns/recursordist/recursor_cache.cc b/pdns/recursordist/recursor_cache.cc index fb9dc700ad..0c240e71ed 100644 --- a/pdns/recursordist/recursor_cache.cc +++ b/pdns/recursordist/recursor_cache.cc @@ -1085,6 +1085,42 @@ size_t MemRecursorCache::getRecords(size_t perShard, size_t maxSize, std::string return count; } +static void putAuthRecord(protozero::pbf_message& message, const DNSName& qname, std::vector>& authRecs) +{ + protozero::pbf_message auth = message.get_message(); + DNSRecord authRecord; + while (auth.next()) { + switch (auth.tag()) { + case PBAuthRecord::required_bytes_name: + authRecord.d_name = DNSName(auth.get_bytes()); + break; + case PBAuthRecord::required_bytes_rdata: { + auto ptr = DNSRecordContent::deserialize(qname, authRecord.d_type, auth.get_bytes()); + authRecord.setContent(ptr); + break; + } + case PBAuthRecord::required_uint32_class: + authRecord.d_class = auth.get_uint32(); + break; + case PBAuthRecord::required_uint32_type: + authRecord.d_type = auth.get_uint32(); + break; + case PBAuthRecord::required_uint32_ttl: + authRecord.d_ttl = auth.get_uint32(); + break; + case PBAuthRecord::required_uint32_place: + authRecord.d_place = static_cast(auth.get_uint32()); + break; + case PBAuthRecord::required_uint32_clen: + authRecord.d_clen = auth.get_uint32(); + break; + default: + assert(0); + } + } + authRecs.emplace_back(std::make_shared(authRecord)); +} + template bool MemRecursorCache::putRecord(T& message) { @@ -1101,41 +1137,9 @@ bool MemRecursorCache::putRecord(T& message) cacheEntry.d_signatures.emplace_back(std::dynamic_pointer_cast(ptr)); break; } - case PBCacheEntry::repeated_message_authRecord: { - protozero::pbf_message auth = message.get_message(); - DNSRecord authRecord; - while (auth.next()) { - switch (auth.tag()) { - case PBAuthRecord::required_bytes_name: - authRecord.d_name = DNSName(auth.get_bytes()); - break; - case PBAuthRecord::required_bytes_rdata: { - auto ptr = DNSRecordContent::deserialize(cacheEntry.d_qname, authRecord.d_type, auth.get_bytes()); - authRecord.setContent(ptr); - break; - } - case PBAuthRecord::required_uint32_class: - authRecord.d_class = auth.get_uint32(); - break; - case PBAuthRecord::required_uint32_type: - authRecord.d_type = auth.get_uint32(); - break; - case PBAuthRecord::required_uint32_ttl: - authRecord.d_ttl = auth.get_uint32(); - break; - case PBAuthRecord::required_uint32_place: - authRecord.d_place = static_cast(auth.get_uint32()); - break; - case PBAuthRecord::required_uint32_clen: - authRecord.d_clen = auth.get_uint32(); - break; - default: - assert(0); - } - } - cacheEntry.d_authorityRecs.emplace_back(std::make_shared(authRecord)); + case PBCacheEntry::repeated_message_authRecord: + putAuthRecord(message, cacheEntry.d_qname, cacheEntry.d_authorityRecs); break; - } case PBCacheEntry::required_bytes_name: cacheEntry.d_qname = DNSName(message.get_bytes()); break; @@ -1145,10 +1149,9 @@ bool MemRecursorCache::putRecord(T& message) case PBCacheEntry::required_message_from: decodeComboAddress(message, cacheEntry.d_from); break; - case PBCacheEntry::optional_bytes_netmask: { + case PBCacheEntry::optional_bytes_netmask: decodeNetmask(message, cacheEntry.d_netmask); break; - } case PBCacheEntry::optional_bytes_rtag: cacheEntry.d_rtag = message.get_bytes(); break;