summaryrefslogtreecommitdiff
path: root/gst/pcapparse
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2015-06-15 12:55:39 +0100
committerTim-Philipp Müller <tim@centricular.com>2015-07-03 10:25:15 +0100
commitaec19c10537124b1dbf1eb4cfa65ef68778fcd67 (patch)
tree8ea5711e8d0ae985845da900d005e39199f8ae16 /gst/pcapparse
parent9e7454a90abe7ea6075e3bcaa0731ed4a8a22b54 (diff)
downloadgstreamer-plugins-bad-aec19c10537124b1dbf1eb4cfa65ef68778fcd67.tar.gz
pcapparse: fix regression when handling packets with eth padding
Introduced by c4c9fe60b pcapparse: Take buffer directly from the adapter Flush any trailing bytes after the payload from the adapter as well, otherwise we'll read a bogus packet size from the adapter next and then everything goes downhill from there. https://bugzilla.gnome.org/show_bug.cgi?id=751879
Diffstat (limited to 'gst/pcapparse')
-rw-r--r--gst/pcapparse/gstpcapparse.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c
index 1a5388e88..75d4cb92a 100644
--- a/gst/pcapparse/gstpcapparse.c
+++ b/gst/pcapparse/gstpcapparse.c
@@ -480,13 +480,12 @@ gst_pcap_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
GstBuffer *out_buf;
guintptr offset = payload_data - data;
- self->cur_packet_size -= offset;
- self->cur_packet_size -= payload_size;
-
gst_adapter_unmap (self->adapter);
gst_adapter_flush (self->adapter, offset);
out_buf = gst_adapter_take_buffer_fast (self->adapter,
payload_size);
+ gst_adapter_flush (self->adapter,
+ self->cur_packet_size - offset - payload_size);
if (GST_CLOCK_TIME_IS_VALID (self->cur_ts)) {
if (!GST_CLOCK_TIME_IS_VALID (self->base_ts))