Use local status for convert profile

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
This commit is contained in:
Dorin Drimus
2022-09-16 10:07:57 +00:00
parent af086389ff
commit 4469c2a063

View File

@@ -2937,13 +2937,14 @@ static jint android_media_AudioSystem_getDirectProfilesForAttributes(JNIEnv *env
for (const auto &audioProfile : audioProfiles) { for (const auto &audioProfile : audioProfiles) {
jobject jAudioProfile; jobject jAudioProfile;
jStatus = convertAudioProfileFromNative(env, &jAudioProfile, &audioProfile, false); jint jConvertProfileStatus = convertAudioProfileFromNative(
if (jStatus == AUDIO_JAVA_BAD_VALUE) { env, &jAudioProfile, &audioProfile, false);
if (jConvertProfileStatus == AUDIO_JAVA_BAD_VALUE) {
// skipping Java layer unsupported audio formats // skipping Java layer unsupported audio formats
continue; continue;
} }
if (jStatus != AUDIO_JAVA_SUCCESS) { if (jConvertProfileStatus != AUDIO_JAVA_SUCCESS) {
return jStatus; return jConvertProfileStatus;
} }
env->CallBooleanMethod(jAudioProfilesList, gArrayListMethods.add, jAudioProfile); env->CallBooleanMethod(jAudioProfilesList, gArrayListMethods.add, jAudioProfile);
env->DeleteLocalRef(jAudioProfile); env->DeleteLocalRef(jAudioProfile);