Don't get confused by some malformed frames - always return -1 - and
assign the result of extract_header_length() to an int, so we don't get
warnings when we compare it against -1. (Its return value always fits
in an int.)
int len = 0;
switch ((fc >> 10) & 0x3) {
- case 0x0:
+ case 0x00:
if (fc & (1 << 6)) /* intra-PAN with none dest addr */
return -1;
break;
- case 0x1:
+ case 0x01:
return -1;
case 0x02:
len += 4;
}
switch ((fc >> 14) & 0x3) {
- case 0x0:
+ case 0x00:
break;
- case 0x1:
+ case 0x01:
return -1;
case 0x02:
len += 4;
break;
}
- if (fc & (1 << 6))
+ if (fc & (1 << 6)) {
+ if (len < 2)
+ return -1;
len -= 2;
+ }
return len;
}
const struct pcap_pkthdr *h, const u_char *p)
{
u_int caplen = h->caplen;
- u_int hdrlen;
+ int hdrlen;
u_int16_t fc;
u_int8_t seq;