Skip to content

Instantly share code, notes, and snippets.

@Habbie
Created April 6, 2021 20:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Habbie/137254a0d8b59d8a15e27ccee10f088f to your computer and use it in GitHub Desktop.
Save Habbie/137254a0d8b59d8a15e27ccee10f088f to your computer and use it in GitHub Desktop.
diff --git a/pdns/dnspcap.cc b/pdns/dnspcap.cc
index c7d634504..409dff0c5 100644
--- a/pdns/dnspcap.cc
+++ b/pdns/dnspcap.cc
@@ -59,6 +59,10 @@ PcapPacketReader::PcapPacketReader(const string& fname) : d_fname(fname)
else throw runtime_error((boost::format("Unsupported link type %d") % d_pfh.linktype).str());
d_runts = d_oversized = d_correctpackets = d_nonetheripudp = 0;
+
+ if (d_skipMediaHeader > mediaHeaderRoom) throw runtime_error("media header is too big");
+
+ d_buffer = d_readbuffer+(d_skipMediaHeader % 4);
}
void PcapPacketReader::checkedFreadSize(void* ptr, size_t size)
@@ -85,9 +89,9 @@ try
continue;
}
- if(d_pheader.caplen > sizeof(d_buffer)) {
+ if(d_pheader.caplen > bufferSize) {
d_oversized++;
- throw runtime_error((boost::format("Can't handle a %d byte packet, have space for %d") % d_pheader.caplen % sizeof(d_buffer)).str());
+ throw runtime_error((boost::format("Can't handle a %d byte packet, have space for %d") % d_pheader.caplen % bufferSize).str());
}
checkedFreadSize(d_buffer, d_pheader.caplen);
diff --git a/pdns/dnspcap.hh b/pdns/dnspcap.hh
index 5cb73a325..d427f51bf 100644
--- a/pdns/dnspcap.hh
+++ b/pdns/dnspcap.hh
@@ -115,7 +115,12 @@ public:
pdns_pcap_file_header d_pfh;
unsigned int d_runts, d_oversized, d_correctpackets, d_nonetheripudp;
- char d_buffer[32768];
+#define bufferSize 32768
+// static const size_t bufferSize = 32768;
+#define mediaHeaderRoom 64
+ // static const size_t mediaHeaderRoom = 64;
+ char d_readbuffer[bufferSize+mediaHeaderRoom];
+ char *d_buffer;
private:
std::unique_ptr<FILE, int(*)(FILE*)> d_fp{nullptr, fclose};
string d_fname;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment