From 439ca2c7959f6d72aa649b6d676ea4b6caf2c043 Mon Sep 17 00:00:00 2001 From: Arnout Vandecappelle Date: Tue, 5 May 2009 17:07:13 +0200 Subject: multipartdemux: avoid reading from inavlid memory Read the timestamp of the incomming buffer before we push it in the adapter and flush it out again as the buffer might be unreffed then and we read from invalid memory. Fixes #581444. --- gst/multipart/multipartdemux.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gst/multipart') diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c index 5f6c7077..3187920e 100644 --- a/gst/multipart/multipartdemux.c +++ b/gst/multipart/multipartdemux.c @@ -469,6 +469,7 @@ gst_multipart_demux_chain (GstPad * pad, GstBuffer * buf) { GstMultipartDemux *multipart; GstAdapter *adapter; + GstClockTime timestamp; gint size = 1; GstFlowReturn res; @@ -477,6 +478,8 @@ gst_multipart_demux_chain (GstPad * pad, GstBuffer * buf) res = GST_FLOW_OK; + timestamp = GST_BUFFER_TIMESTAMP (buf); + if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT)) { gst_adapter_clear (adapter); } @@ -518,7 +521,7 @@ gst_multipart_demux_chain (GstPad * pad, GstBuffer * buf) gst_pad_push_event (srcpad->pad, event); GST_BUFFER_TIMESTAMP (outbuf) = 0; } else { - GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); + GST_BUFFER_TIMESTAMP (outbuf) = timestamp; } GST_DEBUG_OBJECT (multipart, "pushing buffer with timestamp %" GST_TIME_FORMAT, -- cgit