gst/gstpad.c: Add sanity check to make sure we don't get smaller buffers than request...
authorTim-Philipp Müller <tim@centricular.net>
Mon, 19 May 2008 11:59:34 +0000 (11:59 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Mon, 19 May 2008 11:59:34 +0000 (11:59 +0000)
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_buffer_alloc_unchecked):
Add sanity check to make sure we don't get smaller buffers
than requested (and fallback to normal buffer alloc if we do).

ChangeLog
gst/gstpad.c

index b653c3b..edd5064 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-19  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
+       * gst/gstpad.c: (gst_pad_buffer_alloc_unchecked):
+         Add sanity check to make sure we don't get smaller buffers
+         than requested (and fallback to normal buffer alloc if we do).
+
 2008-05-19  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * libs/gst/base/gstbasesink.c: (gst_base_sink_adjust_time),
index 86d7d54..c944652 100644 (file)
@@ -2671,12 +2671,18 @@ gst_pad_buffer_alloc_unchecked (GstPad * pad, guint64 offset, gint size,
     goto fallback;
 
   ret = bufferallocfunc (pad, offset, size, caps, buf);
+
   if (G_UNLIKELY (ret != GST_FLOW_OK))
     goto error;
+
   /* no error, but NULL buffer means fallback to the default */
   if (G_UNLIKELY (*buf == NULL))
     goto fallback;
 
+  /* sanity check */
+  if (G_UNLIKELY (GST_BUFFER_SIZE (*buf) < size))
+    goto wrong_size;
+
   /* If the buffer alloc function didn't set up the caps like it should,
    * do it for it */
   if (G_UNLIKELY (caps && (GST_BUFFER_CAPS (*buf) == NULL))) {
@@ -2699,6 +2705,14 @@ error:
         "alloc function returned error (%d) %s", ret, gst_flow_get_name (ret));
     return ret;
   }
+wrong_size:
+  {
+    GST_CAT_ERROR_OBJECT (GST_CAT_PADS, pad, "buffer returned by alloc "
+        "function is too small: %u < %d", GST_BUFFER_SIZE (*buf), size);
+    gst_buffer_unref (*buf);
+    *buf = NULL;
+    goto fallback;
+  }
 fallback:
   {
     /* fallback case, allocate a buffer of our own, add pad caps. */