From 5659bd3b4f807a8038e213129690a053a3354321 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 23 Sep 2011 15:53:49 +0200 Subject: [PATCH] omxvideodec: Add some more checks for OMX buffer sizes --- omx/gstomxvideodec.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c index 103bfe1..cfa9c85 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -1129,10 +1129,14 @@ gst_omx_video_dec_handle_frame (GstBaseVideoDecoder * decoder, g_assert (acq_ret == GST_OMX_ACQUIRE_BUFFER_OK && buf != NULL); + if (buf->omx_buf->nAllocLen - buf->omx_buf->nOffset <= 0) + goto full_buffer; + if (self->codec_data) { codec_data = self->codec_data; - if (buf->omx_buf->nAllocLen < GST_BUFFER_SIZE (codec_data)) { + if (buf->omx_buf->nAllocLen - buf->omx_buf->nOffset < + GST_BUFFER_SIZE (codec_data)) { gst_omx_port_release_buffer (self->in_port, buf); goto too_large_codec_data; } @@ -1205,6 +1209,15 @@ gst_omx_video_dec_handle_frame (GstBaseVideoDecoder * decoder, return GST_FLOW_OK; +full_buffer: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Got OpenMAX buffer with no free space (%p, %u/%u)", buf, + buf->omx_buf->nOffset, buf->omx_buf->nAllocLen)); + gst_omx_port_release_buffer (self->in_port, buf); + return GST_FLOW_ERROR; + } + too_large_codec_data: { GST_ELEMENT_ERROR (self, STREAM, FORMAT, (NULL), -- 2.7.4