From 47ad361cee48a026c8c3695da04aab75e1e7b925 Mon Sep 17 00:00:00 2001 From: Steve Critchlow Date: Tue, 10 Jul 2012 14:09:10 +0200 Subject: [PATCH] Fix error trap in SurfaceTexture Client There was an issue in Surface::lock where failure to lock a surface resulted in two bad things happening: - success was returned to the caller (it was apparently locked). - an uninitialised pointer was returned as the buffer. Change-Id: I8b0df81400e0fa0542a8bb993d76923ac96b686e --- libs/gui/SurfaceTextureClient.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index 36a81a666..f60f9020c 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -757,12 +757,16 @@ status_t SurfaceTextureClient::lock( ALOGW_IF(res, "failed locking buffer (handle = %p)", backBuffer->handle); - mLockedBuffer = backBuffer; - outBuffer->width = backBuffer->width; - outBuffer->height = backBuffer->height; - outBuffer->stride = backBuffer->stride; - outBuffer->format = backBuffer->format; - outBuffer->bits = vaddr; + if (res != 0) { + err = INVALID_OPERATION; + } else { + mLockedBuffer = backBuffer; + outBuffer->width = backBuffer->width; + outBuffer->height = backBuffer->height; + outBuffer->stride = backBuffer->stride; + outBuffer->format = backBuffer->format; + outBuffer->bits = vaddr; + } } } return err;