From 8fd4eaae6941fc625597e8e55d02541339bf7066 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 10 Aug 2011 08:53:05 +0200 Subject: [PATCH] omx: Set pAppPrivate of buffers to NULL when deallocating buffers This prevents usage of freed memory later if the OMX component has weird behaviour. --- omx/gstomx.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/omx/gstomx.c b/omx/gstomx.c index 61e715e..8b6eea8 100644 --- a/omx/gstomx.c +++ b/omx/gstomx.c @@ -312,8 +312,16 @@ EmptyBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE * pBuffer) { GstOMXBuffer *buf = pBuffer->pAppPrivate; - GstOMXPort *port = buf->port; - GstOMXComponent *comp = port->comp; + GstOMXPort *port; + GstOMXComponent *comp; + + if (buf == NULL) { + GST_ERROR ("Have unknown or deallocated buffer %p", pBuffer); + return OMX_ErrorNone; + } + + port = buf->port; + comp = port->comp; g_assert (buf->omx_buf == pBuffer); @@ -335,8 +343,16 @@ FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE * pBuffer) { GstOMXBuffer *buf = pBuffer->pAppPrivate; - GstOMXPort *port = buf->port; - GstOMXComponent *comp = port->comp; + GstOMXPort *port; + GstOMXComponent *comp; + + if (buf == NULL) { + GST_ERROR ("Have unknown or deallocated buffer %p", pBuffer); + return OMX_ErrorNone; + } + + port = buf->port; + comp = port->comp; g_assert (buf->omx_buf == pBuffer); @@ -1344,6 +1360,7 @@ gst_omx_port_deallocate_buffers_unlocked (GstOMXPort * port) */ if (buf->omx_buf) { g_assert (buf == buf->omx_buf->pAppPrivate); + buf->omx_buf->pAppPrivate = NULL; tmp = OMX_FreeBuffer (comp->handle, port->index, buf->omx_buf); if (tmp != OMX_ErrorNone) { GST_ERROR_OBJECT (comp->parent, -- 2.7.4