summaryrefslogtreecommitdiffstats
path: root/gst/multipart
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 /gst/multipart
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.
Diffstat (limited to 'gst/multipart')
-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,