summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnout Vandecappelle <arnout@mind.be>2009-05-05 17:07:13 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2009-05-05 17:07:13 +0200
commit439ca2c7959f6d72aa649b6d676ea4b6caf2c043 (patch)
tree80977d21a41ccec109cff103e70993c42f3433e1
parent3f2144c5eea3b84bee28fc7424814931ba6bc63c (diff)
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.
-rw-r--r--gst/multipart/multipartdemux.c5
1 files changed, 4 insertions, 1 deletions
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,