From 813714c2e38ba340aef45909de6881ea2bcc2bba Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Thu, 21 Apr 2022 21:31:35 -0700 Subject: [PATCH] Fix missing Release for GetStringUTFChars calls. Bug: 230122201 Test: No leaks detected in these code paths. Test: atest android.hardware.camera2.cts.DngCreatorTest on pixel 6 Pro. Change-Id: I135739b9e65a57c3d130c35fcdf4ffd1ec4786c0 --- core/jni/android_content_res_ApkAssets.cpp | 6 +++++- core/jni/android_hardware_camera2_DngCreator.cpp | 9 ++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/jni/android_content_res_ApkAssets.cpp b/core/jni/android_content_res_ApkAssets.cpp index fc12e174b55d2..a8d72316036ea 100644 --- a/core/jni/android_content_res_ApkAssets.cpp +++ b/core/jni/android_content_res_ApkAssets.cpp @@ -459,8 +459,12 @@ static jobject NativeGetOverlayableInfo(JNIEnv* env, jclass /*clazz*/, jlong ptr return nullptr; } - auto overlayable_name_native = std::string(env->GetStringUTFChars(overlayable_name, NULL)); + const char* overlayable_name_native = env->GetStringUTFChars(overlayable_name, nullptr); + if (overlayable_name_native == nullptr) { + return nullptr; + } auto actor = overlayable_map.find(overlayable_name_native); + env->ReleaseStringUTFChars(overlayable_name, overlayable_name_native); if (actor == overlayable_map.end()) { return nullptr; } diff --git a/core/jni/android_hardware_camera2_DngCreator.cpp b/core/jni/android_hardware_camera2_DngCreator.cpp index db33863ddd772..c947fba2dbd92 100644 --- a/core/jni/android_hardware_camera2_DngCreator.cpp +++ b/core/jni/android_hardware_camera2_DngCreator.cpp @@ -48,6 +48,7 @@ #include #include +#include using namespace android; using namespace img_utils; @@ -1264,16 +1265,14 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt sp nativeContext = new NativeContext(characteristics, results); - const char* captureTime = env->GetStringUTFChars(formattedCaptureTime, nullptr); - - size_t len = strlen(captureTime) + 1; - if (len != NativeContext::DATETIME_COUNT) { + ScopedUtfChars captureTime(env, formattedCaptureTime); + if (captureTime.size() + 1 != NativeContext::DATETIME_COUNT) { jniThrowException(env, "java/lang/IllegalArgumentException", "Formatted capture time string length is not required 20 characters"); return; } - nativeContext->setCaptureTime(String8(captureTime)); + nativeContext->setCaptureTime(String8(captureTime.c_str())); DngCreator_setNativeContext(env, thiz, nativeContext); }