]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
ixfrdist: Fix invalid buffer usage in getSerialFromMaster() 6886/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 27 Aug 2018 21:35:49 +0000 (23:35 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 27 Aug 2018 21:35:49 +0000 (23:35 +0200)
pdns/ixfrutils.cc

index 180b494291f99b193414db31bbcfe7e9a04049c4..04c832451d8cb0b36034192730cd7c65740afbba 100644 (file)
@@ -49,10 +49,14 @@ uint32_t getSerialFromMaster(const ComboAddress& master, const DNSName& zone, sh
   s.writen(msg);
 
   string reply;
-  char buf[4096];
+  reply.resize(4096);
   // will throw a NetworkError on timeout
-  s.readWithTimeout(buf, sizeof(buf), timeout);
-  reply.assign(buf);
+  ssize_t got = s.readWithTimeout(&reply[0], reply.size(), timeout);
+  if (got < 0 || static_cast<size_t>(got) < sizeof(dnsheader)) {
+    throw std::runtime_error("Invalid response size " + std::to_string(got));
+  }
+
+  reply.resize(got);
 
   MOADNSParser mdp(false, reply);
   if(mdp.d_header.rcode) {