pcapparse: fix regression when handling packets with eth padding
authorTim-Philipp Müller <tim@centricular.com>
Mon, 15 Jun 2015 11:55:39 +0000 (12:55 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 3 Jul 2015 09:25:15 +0000 (10:25 +0100)
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

index 1a5388e..75d4cb9 100644 (file)
@@ -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))