Make the ERF code in pcap_get_phdr_size() more like the reading code.

Change-Id: I6cd17b1ed4b3ed2aa2cc88b3cbae354d36dafead
Reviewed-on: https://code.wireshark.org/review/29880
Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
Guy Harris 2018-09-26 13:04:36 -07:00
parent 6caf3c7299
commit 854cfe53ef
1 changed files with 23 additions and 17 deletions

View File

@ -1412,7 +1412,7 @@ pcap_read_erf_pseudoheader(FILE_T fh, wtap_rec *rec,
/*
* If the type of record given in the pseudo header indicates
* the presence of an extension header then, read all the
* the presence of an extension header, then read all the
* extension headers.
*/
if (pseudo_header->erf.phdr.type & 0x80) {
@ -2374,6 +2374,28 @@ pcap_get_phdr_size(int encap, const union wtap_pseudo_header *pseudo_header)
case WTAP_ENCAP_ERF:
hdrsize = (int)sizeof (struct erf_phdr);
/*
* If the type of record given in the pseudo header
* indicates the presence of an extension header, then
* add in the lengths of the extension headers.
*/
if (pseudo_header->erf.phdr.type & 0x80) {
int i = 0, max = sizeof(pseudo_header->erf.ehdr_list)/sizeof(struct erf_ehdr);
guint8 erf_exhdr[8];
guint8 type;
do {
phtonll(erf_exhdr, pseudo_header->erf.ehdr_list[i].ehdr);
type = erf_exhdr[0];
hdrsize += 8;
i++;
} while (type & 0x80 && i < max);
}
/*
* Now add in the length of the subheader, if any.
*/
switch (pseudo_header->erf.phdr.type & 0x7F) {
case ERF_TYPE_MC_HDLC:
@ -2399,22 +2421,6 @@ pcap_get_phdr_size(int encap, const union wtap_pseudo_header *pseudo_header)
default:
break;
}
/*
* Add in the lengths of the extension headers.
*/
if (pseudo_header->erf.phdr.type & 0x80) {
int i = 0, max = sizeof(pseudo_header->erf.ehdr_list)/sizeof(struct erf_ehdr);
guint8 erf_exhdr[8];
guint8 type;
do {
phtonll(erf_exhdr, pseudo_header->erf.ehdr_list[i].ehdr);
type = erf_exhdr[0];
hdrsize += 8;
i++;
} while (type & 0x80 && i < max);
}
break;
case WTAP_ENCAP_I2C: