diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2006-06-29 11:11:50 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-06-29 11:11:50 +0000 |
commit | 5aa89bdd337f4d619bd7ec16ca8d2d03ef6a564c (patch) | |
tree | 4d729ab8b63a2b3ccc7225dce75eb1b7e9621145 /gst/id3demux | |
parent | 1614e03cdb756e35b75b86c41397407558ed5fdf (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/id3demux')
-rw-r--r-- | gst/id3demux/gstid3demux.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/gst/id3demux/gstid3demux.c b/gst/id3demux/gstid3demux.c index e03a1939..d2f21573 100644 --- a/gst/id3demux/gstid3demux.c +++ b/gst/id3demux/gstid3demux.c @@ -384,7 +384,7 @@ gst_id3demux_trim_buffer (GstID3Demux * id3demux, GstBuffer ** buf_ref) no_out_buffer: gst_buffer_unref (buf); *buf_ref = NULL; - return TRUE; + return FALSE; } static GstFlowReturn @@ -933,25 +933,31 @@ gst_id3demux_read_range (GstID3Demux * id3demux, if (!id3demux_get_upstream_size (id3demux)) return GST_FLOW_ERROR; - if (in_offset + length >= id3demux->upstream_size - id3demux->strip_end) + if (in_offset + length >= id3demux->upstream_size - id3demux->strip_end) { + if (in_offset + id3demux->strip_end >= id3demux->upstream_size) + return GST_FLOW_UNEXPECTED; in_length = id3demux->upstream_size - id3demux->strip_end - in_offset; - else + } else { in_length = length; + } ret = gst_pad_pull_range (id3demux->sinkpad, in_offset, in_length, buffer); - if (ret == GST_FLOW_OK && *buffer) { if (!gst_id3demux_trim_buffer (id3demux, 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 (id3demux, "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 |