From: Remi Gacogne Date: Mon, 6 Aug 2018 16:54:31 +0000 (+0200) Subject: rec: Replace the cached qname at once instead of label by label X-Git-Tag: dnsdist-1.3.3~6^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2651c4ce26835c0da15bfa5221df83d02743f2a2;p=thirdparty%2Fpdns.git rec: Replace the cached qname at once instead of label by label (cherry picked from commit 119f9dc913c1c088a8323cd1345744a7a91c89f9) --- 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++;