From 7c68a4076e1ef141db5ac338d675646a278f0eb8 Mon Sep 17 00:00:00 2001 From: Pawel Augustyn Date: Mon, 16 Jul 2012 11:23:54 +0200 Subject: [PATCH] Fix for native leaks in YuvToJpegEncoder.cpp Objects allocated by GetArrayElements function, should be released. Add a fix to release this objects in error cases. Change-Id: Idf834523d93bb2dfd6b872e3b2179b7f1bba38f3 --- core/jni/android/graphics/YuvToJpegEncoder.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/jni/android/graphics/YuvToJpegEncoder.cpp b/core/jni/android/graphics/YuvToJpegEncoder.cpp index 799782d53ce22..6591d60b1eecf 100644 --- a/core/jni/android/graphics/YuvToJpegEncoder.cpp +++ b/core/jni/android/graphics/YuvToJpegEncoder.cpp @@ -226,16 +226,17 @@ static jboolean YuvImage_compressToJpeg(JNIEnv* env, jobject, jbyteArray inYuv, jint* imgOffsets = env->GetIntArrayElements(offsets, NULL); jint* imgStrides = env->GetIntArrayElements(strides, NULL); YuvToJpegEncoder* encoder = YuvToJpegEncoder::create(format, imgStrides); - if (encoder == NULL) { - return JNI_FALSE; + jboolean result = JNI_FALSE; + if (encoder != NULL) { + encoder->encode(strm, yuv, width, height, imgOffsets, jpegQuality); + delete encoder; + result = JNI_TRUE; } - encoder->encode(strm, yuv, width, height, imgOffsets, jpegQuality); - delete encoder; env->ReleaseByteArrayElements(inYuv, yuv, 0); env->ReleaseIntArrayElements(offsets, imgOffsets, 0); env->ReleaseIntArrayElements(strides, imgStrides, 0); - return JNI_TRUE; + return result; } ///////////////////////////////////////////////////////////////////////////////