From aec19c10537124b1dbf1eb4cfa65ef68778fcd67 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 15 Jun 2015 12:55:39 +0100 Subject: [PATCH] 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 --- gst/pcapparse/gstpcapparse.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c index 1a5388e..75d4cb9 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)) -- 2.7.4