OSDN Git Service

SurfaceTexture: fix an out of bounds array access
authorJamie Gennis <jgennis@google.com>
Tue, 7 Aug 2012 00:10:57 +0000 (17:10 -0700)
committerJamie Gennis <jgennis@google.com>
Tue, 7 Aug 2012 01:55:01 +0000 (18:55 -0700)
Bug: 6879028
Change-Id: Ic3d35a9384c0a6dfa4000e7743a6f6859608b0bf

libs/gui/SurfaceTexture.cpp

index 68b9feb..a2aca8f 100644 (file)
@@ -316,7 +316,7 @@ status_t SurfaceTexture::updateTexImage(BufferRejecter* rejecter) {
         computeCurrentTransformMatrix();
     } else  {
         if (err < 0) {
-            ALOGE("updateTexImage failed on acquire %d", err);
+            ST_LOGE("updateTexImage failed on acquire %d", err);
         }
         // We always bind the texture even if we don't update its contents.
         glBindTexture(mTexTarget, mTexName);
@@ -327,7 +327,7 @@ status_t SurfaceTexture::updateTexImage(BufferRejecter* rejecter) {
 }
 
 void SurfaceTexture::setReleaseFence(int fenceFd) {
-    if (fenceFd == -1)
+    if (fenceFd == -1 || mCurrentTexture == BufferQueue::INVALID_BUFFER_SLOT)
         return;
     sp<Fence> fence(new Fence(fenceFd));
     if (!mEGLSlots[mCurrentTexture].mReleaseFence.get()) {
@@ -337,7 +337,7 @@ void SurfaceTexture::setReleaseFence(int fenceFd) {
                 String8("SurfaceTexture merged release"),
                 mEGLSlots[mCurrentTexture].mReleaseFence, fence);
         if (!mergedFence.get()) {
-            ALOGE("failed to merge release fences");
+            ST_LOGE("failed to merge release fences");
             // synchronization is broken, the best we can do is hope fences
             // signal in order so the new fence will act like a union
             mEGLSlots[mCurrentTexture].mReleaseFence = fence;