]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: Correctly check unknown record content size 4890/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 25 Oct 2016 15:40:09 +0000 (17:40 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 25 Oct 2016 15:40:09 +0000 (17:40 +0200)
pdns/dnsparser.cc

index 7276101509423fb8553f945e55548e71c8e40349..12e4f45691ec5724eca781424491c3e85c49a3e5 100644 (file)
@@ -63,8 +63,8 @@ public:
       throw MOADNSException("Unknown record was stored incorrectly, need 3 fields, got "+lexical_cast<string>(parts.size())+": "+tmp );
     const string& relevant=(parts.size() > 2) ? parts[2] : "";
     unsigned int total=atoi(parts[1].c_str());
-    if(relevant.size()!=2*total)
-      throw MOADNSException((boost::format("invalid unknown record length for label %s: size not equal to length field (%d != %d)") % d_dr.d_label.c_str() % relevant.size() % (2*total)).str());
+    if(relevant.size() % 2 || relevant.size() / 2 != total)
+      throw MOADNSException((boost::format("invalid unknown record length for label %s: size not equal to length field (%d != 2 * %d)") % d_dr.d_label.c_str() % relevant.size() % total).str());
     string out;
     out.reserve(total+1);
     for(unsigned int n=0; n < total; ++n) {