summaryrefslogtreecommitdiff
path: root/wiretap/ngsniffer.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2013-12-31 23:43:54 +0000
committerGuy Harris <guy@alum.mit.edu>2013-12-31 23:43:54 +0000
commitcdce403745187e103d1bfc6f9e08272f77f092b5 (patch)
treec1888ebcdd20fcf449d57a59e06501759cf934a2 /wiretap/ngsniffer.c
parent0dd01761f37ee7e77d99b2843638f41f5d0f884d (diff)
downloadwireshark-cdce403745187e103d1bfc6f9e08272f77f092b5.tar.gz
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
Diffstat (limited to 'wiretap/ngsniffer.c')
-rw-r--r--wiretap/ngsniffer.c16
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;
}