From: Miod Vallat Date: Fri, 6 Dec 2024 10:10:41 +0000 (+0100) Subject: Address review and clang-tidy comments. X-Git-Tag: dnsdist-2.0.0-alpha0~3^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3332fd455ba7b256702f231dd302f8301cb9e443;p=thirdparty%2Fpdns.git Address review and clang-tidy comments. --- diff --git a/pdns/dnsparser.cc b/pdns/dnsparser.cc index 5dd2de0ce9..12974ae57c 100644 --- a/pdns/dnsparser.cc +++ b/pdns/dnsparser.cc @@ -80,7 +80,7 @@ void UnknownRecordContent::toPacket(DNSPacketWriter& pw) const pw.xfrBlob(string(d_record.begin(),d_record.end())); } -shared_ptr DNSRecordContent::deserialize(const DNSName& qname, uint16_t qtype, const string& serialized, uint16_t qclass, bool trusted) +shared_ptr DNSRecordContent::deserialize(const DNSName& qname, uint16_t qtype, const string& serialized, uint16_t qclass, bool internalRepresentation) { dnsheader dnsheader; memset(&dnsheader, 0, sizeof(dnsheader)); @@ -118,10 +118,11 @@ shared_ptr DNSRecordContent::deserialize(const DNSName& qname, dr.d_type = qtype; dr.d_name = qname; dr.d_clen = serialized.size(); - PacketReader pr(std::string_view(reinterpret_cast(packet.data()), packet.size()), packet.size() - serialized.size() - sizeof(dnsrecordheader), trusted); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast): packet.data() is uint8_t * + PacketReader reader(std::string_view(reinterpret_cast(packet.data()), packet.size()), packet.size() - serialized.size() - sizeof(dnsrecordheader), internalRepresentation); /* needed to get the record boundaries right */ - pr.getDnsrecordheader(drh); - auto content = DNSRecordContent::make(dr, pr, Opcode::Query); + reader.getDnsrecordheader(drh); + auto content = DNSRecordContent::make(dr, reader, Opcode::Query); return content; } @@ -665,9 +666,10 @@ void PacketReader::xfrSvcParamKeyVals(set &kvs) { xfrCAWithoutPort(key, addr); addresses.push_back(addr); } - // If there were no addresses, and the input comes from a trusted source, - // we can reasonably suppose this is the serialization of "auto". - bool doAuto{d_trusted && len == 0}; + // If there were no addresses, and the input comes from internal + // representation, we can reasonably assume this is the serialization + // of "auto". + bool doAuto{d_internal && len == 0}; auto param = SvcParam(key, std::move(addresses)); param.setAutoHint(doAuto); kvs.insert(param); diff --git a/pdns/dnsparser.hh b/pdns/dnsparser.hh index ae9778a7d7..fd2f5b7112 100644 --- a/pdns/dnsparser.hh +++ b/pdns/dnsparser.hh @@ -68,8 +68,8 @@ class MOADNSParser; class PacketReader { public: - PacketReader(const std::string_view& content, uint16_t initialPos=sizeof(dnsheader), bool trusted = false) - : d_pos(initialPos), d_startrecordpos(initialPos), d_content(content), d_trusted(trusted) + PacketReader(const std::string_view& content, uint16_t initialPos=sizeof(dnsheader), bool internalRepresentation = false) + : d_pos(initialPos), d_startrecordpos(initialPos), d_content(content), d_internal(internalRepresentation) { if(content.size() > std::numeric_limits::max()) throw std::out_of_range("packet too large"); @@ -186,7 +186,7 @@ private: uint16_t d_recordlen; // ditto uint16_t not_used; // Aligns the whole class on 8-byte boundaries const std::string_view d_content; - bool d_trusted; + bool d_internal; }; struct DNSRecord; @@ -226,8 +226,10 @@ public: return typeid(*this)==typeid(rhs) && this->getZoneRepresentation() == rhs.getZoneRepresentation(); } - // parse the content in wire format, possibly including compressed pointers pointing to the owner name - static shared_ptr deserialize(const DNSName& qname, uint16_t qtype, const string& serialized, uint16_t qclass=QClass::IN, bool trusted = false); + // parse the content in wire format, possibly including compressed pointers pointing to the owner name. + // internalRepresentation is set when the data comes from an internal source, + // such as the LMDB backend. + static shared_ptr deserialize(const DNSName& qname, uint16_t qtype, const string& serialized, uint16_t qclass=QClass::IN, bool internalRepresentation = false); void doRecordCheck(const struct DNSRecord&){}