From 2651c4ce26835c0da15bfa5221df83d02743f2a2 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Mon, 6 Aug 2018 18:54:31 +0200 Subject: [PATCH] rec: Replace the cached qname at once instead of label by label (cherry picked from commit 119f9dc913c1c088a8323cd1345744a7a91c89f9) --- pdns/recpacketcache.cc | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/pdns/recpacketcache.cc b/pdns/recpacketcache.cc index 5b1feeca28..6faf00ae64 100644 --- a/pdns/recpacketcache.cc +++ b/pdns/recpacketcache.cc @@ -67,14 +67,9 @@ bool RecursorPacketCache::checkResponseMatches(std::pairreplace(0, 2, queryPacket.c_str(), 2); *valState = iter->d_vstate; - string::size_type i=sizeof(dnsheader); - - for(;;) { - unsigned int labellen = (unsigned char)queryPacket[i]; - if(!labellen || i + labellen > responsePacket->size()) break; - i++; - responsePacket->replace(i, labellen, queryPacket, i, labellen); - i = i + labellen; + const size_t wirelength = qname.wirelength(); + if (responsePacket->size() > (sizeof(dnsheader) + wirelength)) { + responsePacket->replace(sizeof(dnsheader), wirelength, queryPacket, sizeof(dnsheader), wirelength); } d_hits++; -- 2.47.2