Android: Fixed a crash when trying to get list of voices (#1482)

There was a problem when reference table was overflowing because of lots
of local references.

Now espeak should not crash on some android devices.
This commit is contained in:
Alexander Epaneshnikov
2022-11-02 12:06:56 +03:00
committed by GitHub
+12 -8
View File
@@ -195,14 +195,18 @@ JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeGetAvailableVoices(
sprintf(gender_buf, "%d", v->gender);
sprintf(age_buf, "%d", v->age);
(*env)->SetObjectArrayElement(
env, voicesArray, voicesIndex++, (*env)->NewStringUTF(env, lang_name));
(*env)->SetObjectArrayElement(
env, voicesArray, voicesIndex++, (*env)->NewStringUTF(env, identifier));
(*env)->SetObjectArrayElement(
env, voicesArray, voicesIndex++, (*env)->NewStringUTF(env, gender_buf));
(*env)->SetObjectArrayElement(
env, voicesArray, voicesIndex++, (*env)->NewStringUTF(env, age_buf));
jstring lang = (*env)->NewStringUTF(env, lang_name);
(*env)->SetObjectArrayElement(env, voicesArray, voicesIndex++, lang);
(*env)->DeleteLocalRef(env, lang);
jstring ident = (*env)->NewStringUTF(env, identifier);
(*env)->SetObjectArrayElement(env, voicesArray, voicesIndex++, ident);
(*env)->DeleteLocalRef(env, ident);
jstring gender = (*env)->NewStringUTF(env, gender_buf);
(*env)->SetObjectArrayElement(env, voicesArray, voicesIndex++, gender);
(*env)->DeleteLocalRef(env, gender);
jstring age = (*env)->NewStringUTF(env, age_buf);
(*env)->SetObjectArrayElement(env, voicesArray, voicesIndex++, age);
(*env)->DeleteLocalRef(env, age);
}
return voicesArray;