diff options
author | Guy Harris <guy@alum.mit.edu> | 2013-12-31 23:43:54 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2013-12-31 23:43:54 +0000 |
commit | cdce403745187e103d1bfc6f9e08272f77f092b5 (patch) | |
tree | c1888ebcdd20fcf449d57a59e06501759cf934a2 | |
parent | 0dd01761f37ee7e77d99b2843638f41f5d0f884d (diff) |
When reading sequentially, pass the packet data length to
ngsniffer_read_rec_data(), and separatelyskip extra data after that.
When reading randomly, use the packet length read from the packet
header.
svn path=/trunk/; revision=54523
-rw-r--r-- | wiretap/ngsniffer.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/wiretap/ngsniffer.c b/wiretap/ngsniffer.c index 9c18623504..cc86c1074f 100644 --- a/wiretap/ngsniffer.c +++ b/wiretap/ngsniffer.c @@ -1224,10 +1224,18 @@ found: /* * Read the packet data. */ - if (!ngsniffer_read_rec_data(wth, FALSE, wth->frame_buffer, length, + if (!ngsniffer_read_rec_data(wth, FALSE, wth->frame_buffer, size, err, err_info)) return FALSE; /* Read error */ + /* + * Skip any extra data in the record. + */ + if (size < length) { + if (!ng_file_skip_seq(wth, length - size, err, err_info)) + return FALSE; + } + wth->phdr.pkt_encap = fix_pseudo_header(wth->file_encap, wth->frame_buffer, length, &wth->phdr.pseudo_header); @@ -1266,7 +1274,7 @@ found: static gboolean ngsniffer_seek_read(wtap *wth, gint64 seek_off, - struct wtap_pkthdr *phdr, Buffer *buf, int packet_size, + struct wtap_pkthdr *phdr, Buffer *buf, int packet_size _U_, int *err, gchar **err_info) { union wtap_pseudo_header *pseudo_header = &phdr->pseudo_header; @@ -1339,10 +1347,10 @@ ngsniffer_seek_read(wtap *wth, gint64 seek_off, /* * Got the pseudo-header (if any), now get the data. */ - if (!ngsniffer_read_rec_data(wth, TRUE, buf, packet_size, err, err_info)) + if (!ngsniffer_read_rec_data(wth, TRUE, buf, phdr->caplen, err, err_info)) return FALSE; - fix_pseudo_header(wth->file_encap, buf, packet_size, pseudo_header); + fix_pseudo_header(wth->file_encap, buf, phdr->caplen, pseudo_header); return TRUE; } |