summaryrefslogtreecommitdiffstats
path: root/gst/apetag
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2006-06-29 11:11:50 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-06-29 11:11:50 +0000
commit5aa89bdd337f4d619bd7ec16ca8d2d03ef6a564c (patch)
tree4d729ab8b63a2b3ccc7225dce75eb1b7e9621145 /gst/apetag
parent1614e03cdb756e35b75b86c41397407558ed5fdf (diff)
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.
Diffstat (limited to 'gst/apetag')
-rw-r--r--gst/apetag/gsttagdemux.c24
1 files changed, 15 insertions, 9 deletions
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