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
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index f24c666..88aa4de 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -2937,13 +2937,14 @@
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);