+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),
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))) {
"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. */