]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
improve error reporting on malformed labels
authorbert hubert <bert.hubert@netherlabs.nl>
Fri, 29 Aug 2014 14:28:11 +0000 (16:28 +0200)
committerbert hubert <bert.hubert@netherlabs.nl>
Fri, 29 Aug 2014 14:28:11 +0000 (16:28 +0200)
pdns/dnsparser.cc
pdns/pdns_recursor.cc

index a03644e8b04afacfe638f6d709b005ab9b19e043..595a4afbdff345ec2e0bbac22cb20dc5bbfea76a 100644 (file)
@@ -466,7 +466,7 @@ void PacketReader::getLabelFromContent(const vector<uint8_t>& content, uint16_t&
               ret.append(1,'.');
       break;
     }
-    if((labellen & 0xc0) == 0xc0) {
+    else if((labellen & 0xc0) == 0xc0) {
       uint16_t offset=256*(labellen & ~0xc0) + (unsigned int)content.at(frompos++) - sizeof(dnsheader);
       //        cout<<"This is an offset, need to go to: "<<offset<<endl;
 
@@ -474,6 +474,8 @@ void PacketReader::getLabelFromContent(const vector<uint8_t>& content, uint16_t&
         throw MOADNSException("forward reference during label decompression");
       return getLabelFromContent(content, offset, ret, ++recurs);
     }
+    else if(labellen > 63) 
+      throw MOADNSException("Overly long label during label decompression ("+lexical_cast<string>((unsigned int)labellen)+")");
     else {
       // XXX FIXME THIS MIGHT BE VERY SLOW!
       ret.reserve(ret.size() + labellen + 2);
index efd61762e7897d67acf54d5ba621a7bb828a34d8..c4660fc1881278f8f44e92297711736a8b7e6134 100644 (file)
@@ -894,7 +894,6 @@ string* doProcessUDPQuestion(const std::string& question, const ComboAddress& fr
     return 0;
   }
   
-  
   if(MT->numProcesses() > g_maxMThreads) {
     g_stats.overCapacityDrops++;
     return 0;