From 4469c2a06379c4c53f744add3091834047b20fe8 Mon Sep 17 00:00:00 2001 From: Dorin Drimus Date: Fri, 16 Sep 2022 10:07:57 +0000 Subject: [PATCH] Use local status for convert profile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When converting and filtering the list of audio profile from native to Java, if we reuse the global jStatus for the profiles loop, a wrong value for the last element can propagate as the global return value. Using a local status fixes the issue. Bug: 246759253 Change-Id: Ifd2bd3cb2b2252c08055c95375fe499e3f23ce02 Test:  atest DirectAudioProfilesForAttributesTest --- core/jni/android_media_AudioSystem.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index f24c66695052d..88aa4de0db24c 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -2937,13 +2937,14 @@ static jint android_media_AudioSystem_getDirectProfilesForAttributes(JNIEnv *env for (const auto &audioProfile : audioProfiles) { jobject jAudioProfile; - jStatus = convertAudioProfileFromNative(env, &jAudioProfile, &audioProfile, false); - if (jStatus == AUDIO_JAVA_BAD_VALUE) { + jint jConvertProfileStatus = convertAudioProfileFromNative( + env, &jAudioProfile, &audioProfile, false); + if (jConvertProfileStatus == AUDIO_JAVA_BAD_VALUE) { // skipping Java layer unsupported audio formats continue; } - if (jStatus != AUDIO_JAVA_SUCCESS) { - return jStatus; + if (jConvertProfileStatus != AUDIO_JAVA_SUCCESS) { + return jConvertProfileStatus; } env->CallBooleanMethod(jAudioProfilesList, gArrayListMethods.add, jAudioProfile); env->DeleteLocalRef(jAudioProfile);