summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2015-01-06 00:44:11 -0800
committerGuy Harris <guy@alum.mit.edu>2015-01-06 11:07:03 -0800
commit23150e10916408db575ac158433191efc7cec023 (patch)
treec6b0fffba00b11b5a96373b2e99b2edcaa006818
parent8079e28185d34d3bb4d195e21cb87d5fa8598601 (diff)
downloadtcpdump_4.1.tar.gz
Check not just the capture length but the on-the-network length.tcpdump_4.1
-rw-r--r--print-arcnet.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/print-arcnet.c b/print-arcnet.c
index a7b9f0da..886af8f8 100644
--- a/print-arcnet.c
+++ b/print-arcnet.c
@@ -118,9 +118,8 @@ arcnet_if_print(const struct pcap_pkthdr *h, const u_char *p)
u_int seqid = 0;
u_char arc_type;
- if (caplen < ARC_HDRLEN) {
+ if (caplen < ARC_HDRLEN || length < ARC_HDRLEN) {
printf("[|arcnet]");
- return (caplen);
}
ap = (const struct arc_header *)p;
@@ -139,14 +138,14 @@ arcnet_if_print(const struct pcap_pkthdr *h, const u_char *p)
}
if (phds) {
- if (caplen < ARC_HDRNEWLEN) {
+ if (caplen < ARC_HDRNEWLEN || length < ARC_HDRNEWLEN) {
arcnet_print(p, length, 0, 0, 0);
printf("[|phds]");
return (caplen);
}
if (ap->arc_flag == 0xff) {
- if (caplen < ARC_HDRNEWLEN_EXC) {
+ if (caplen < ARC_HDRNEWLEN_EXC || length < ARC_HDRNEWLEN_EXC) {
arcnet_print(p, length, 0, 0, 0);
printf("[|phds extended]");
return (caplen);
@@ -205,7 +204,7 @@ arcnet_linux_if_print(const struct pcap_pkthdr *h, const u_char *p)
int archdrlen = 0;
u_char arc_type;
- if (caplen < ARC_LINUX_HDRLEN) {
+ if (caplen < ARC_LINUX_HDRLEN || length < ARC_LINUX_HDRLEN) {
printf("[|arcnet]");
return (caplen);
}
@@ -216,7 +215,7 @@ arcnet_linux_if_print(const struct pcap_pkthdr *h, const u_char *p)
switch (arc_type) {
default:
archdrlen = ARC_LINUX_HDRNEWLEN;
- if (caplen < ARC_LINUX_HDRNEWLEN) {
+ if (caplen < ARC_LINUX_HDRNEWLEN || length < ARC_LINUX_HDRNEWLEN) {
printf("[|arcnet]");
return (caplen);
}