From e09dcdba7161170a6b052dffe2a5608d1f07548b Mon Sep 17 00:00:00 2001 From: Zhijun He Date: Wed, 26 Nov 2014 13:24:48 -0800 Subject: [PATCH] ImageReader: free direct byte buffers once Image is returned This can prevent apps from accessing an image byte buffer when it is closed. Bug: 12528089 Change-Id: I04dccf1832204be2ae3aeb3bbe04f616886447e6 --- media/java/android/media/ImageReader.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java index b5414546d0b01..400c082ebd6eb 100644 --- a/media/java/android/media/ImageReader.java +++ b/media/java/android/media/ImageReader.java @@ -26,6 +26,7 @@ import android.view.Surface; import java.lang.ref.WeakReference; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.NioUtils; /** *

The ImageReader class allows direct application access to image data @@ -688,6 +689,15 @@ public class ImageReader implements AutoCloseable { } private void clearBuffer() { + // Need null check first, as the getBuffer() may not be called before an image + // is closed. + if (mBuffer == null) { + return; + } + + if (mBuffer.isDirect()) { + NioUtils.freeDirectBuffer(mBuffer); + } mBuffer = null; }