Created
April 6, 2021 20:28
-
-
Save Habbie/137254a0d8b59d8a15e27ccee10f088f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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