]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Replace the cached qname at once instead of label by label
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 6 Aug 2018 16:54:31 +0000 (18:54 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 2 Nov 2018 15:55:46 +0000 (16:55 +0100)
(cherry picked from commit 119f9dc913c1c088a8323cd1345744a7a91c89f9)

pdns/recpacketcache.cc

index 5b1feeca283a595f61173a86d4cf2ad63b26d492..6faf00ae641f9a736acd344c7fba5701d7beffd4 100644 (file)
@@ -67,14 +67,9 @@ bool RecursorPacketCache::checkResponseMatches(std::pair<packetCache_t::index<Ha
       responsePacket->replace(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++;