From 5aa89bdd337f4d619bd7ec16ca8d2d03ef6a564c Mon Sep 17 00:00:00 2001 From: Tim-Philipp Müller Date: Thu, 29 Jun 2006 11:11:50 +0000 Subject: gst/id3demux/gstid3demux.c: Make sure we don't return GST_FLOW_OK with a NULL buffer in certain cases where a read be... Original commit message from CVS: * gst/id3demux/gstid3demux.c: (gst_id3demux_trim_buffer), (gst_id3demux_read_range): Make sure we don't return GST_FLOW_OK with a NULL buffer in certain cases where a read beyond the end of the file is requested. Fixes #345930. * gst/apetag/gsttagdemux.c: (gst_tag_demux_trim_buffer), (gst_tag_demux_read_range): Fix same issue here as well. --- gst/apetag/gsttagdemux.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'gst/apetag') diff --git a/gst/apetag/gsttagdemux.c b/gst/apetag/gsttagdemux.c index ef9dc8c5..a1fac5e3 100644 --- a/gst/apetag/gsttagdemux.c +++ b/gst/apetag/gsttagdemux.c @@ -434,7 +434,7 @@ gst_tag_demux_trim_buffer (GstTagDemux * tagdemux, GstBuffer ** buf_ref) no_out_buffer: gst_buffer_unref (buf); *buf_ref = NULL; - return TRUE; + return FALSE; } static void @@ -1158,26 +1158,32 @@ gst_tag_demux_read_range (GstTagDemux * demux, if (!gst_tag_demux_get_upstream_size (demux)) return GST_FLOW_ERROR; - if (in_offset + length >= demux->priv->upstream_size - demux->priv->strip_end) + if (in_offset + length >= demux->priv->upstream_size - demux->priv->strip_end) { + if (in_offset + demux->priv->strip_end >= demux->priv->upstream_size) + return GST_FLOW_UNEXPECTED; in_length = demux->priv->upstream_size - demux->priv->strip_end - in_offset; - else + } else { in_length = length; + } ret = gst_pad_pull_range (demux->priv->sinkpad, in_offset, in_length, buffer); if (ret == GST_FLOW_OK && *buffer) { if (!gst_tag_demux_trim_buffer (demux, buffer)) - goto error; + goto read_beyond_end; } return ret; -error: - if (*buffer != NULL) { - gst_buffer_unref (buffer); - *buffer = NULL; +read_beyond_end: + { + GST_DEBUG_OBJECT (demux, "attempted read beyond end of file"); + if (*buffer != NULL) { + gst_buffer_unref (buffer); + *buffer = NULL; + } + return GST_FLOW_UNEXPECTED; } - return GST_FLOW_ERROR; } static GstFlowReturn -- cgit