gst/id3demux/gstid3demux.c: Make sure we don't return GST_FLOW_OK with a NULL buffer...
authorTim-Philipp Müller <tim@centricular.net>
Thu, 29 Jun 2006 11:11:50 +0000 (11:11 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Thu, 29 Jun 2006 11:11:50 +0000 (11:11 +0000)
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.

ChangeLog
gst/apetag/gsttagdemux.c
gst/id3demux/gstid3demux.c

index 37c752d4096d7b831c2f01564ca35004c02eee37..ceb6efa15d75e0ac57c052de63426d5593cd370e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-06-29  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * 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.
+
 2006-06-29  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
 
        * sys/ximage/gstximagesrc.c: (gst_ximage_src_ximage_get):
index ef9dc8c523bbbcf69b87cfa64ad156edac6175ea..a1fac5e35bdd39d9bf39cced05f406c43b9bc7f7 100644 (file)
@@ -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
index e03a1939635017206ab820e982af8243dfd7903b..d2f215734d24346536a69557cfb83a3d78f7fefb 100644 (file)
@@ -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