From: Dongwon Kang Date: Thu, 24 May 2018 00:38:35 +0000 (-0700) Subject: MediaPlayer: ensure that jni code returns after throwing exceptions. X-Git-Tag: android-x86-9.0-r1~103^2~7^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4480127cadd2a285f726c820d0169a6aa1846477;p=android-x86%2Fframeworks-base.git MediaPlayer: ensure that jni code returns after throwing exceptions. Test: no crash on getPlaybackParams and pass post media CTS Bug: 80200877 Change-Id: I7538967962acc2a23062615c0d39720b34505f17 --- diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index eda22d574fd7..5dd01b03274a 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -384,6 +384,9 @@ android_media_MediaPlayer_getBufferingParams(JNIEnv *env, jobject thiz) process_media_player_call( env, thiz, mp->getBufferingSettings(&settings), "java/lang/IllegalStateException", "unexpected error"); + if (env->ExceptionCheck()) { + return nullptr; + } ALOGV("getBufferingSettings:{%s}", settings.toString().string()); return bp.asJobject(env, gBufferingParamsFields); @@ -555,6 +558,9 @@ android_media_MediaPlayer_getPlaybackParams(JNIEnv *env, jobject thiz) process_media_player_call( env, thiz, mp->getPlaybackSettings(&audioRate), "java/lang/IllegalStateException", "unexpected error"); + if (env->ExceptionCheck()) { + return nullptr; + } ALOGV("getPlaybackSettings: %f %f %d %d", audioRate.mSpeed, audioRate.mPitch, audioRate.mFallbackMode, audioRate.mStretchMode); @@ -623,6 +629,9 @@ android_media_MediaPlayer_getSyncParams(JNIEnv *env, jobject thiz) process_media_player_call( env, thiz, mp->getSyncSettings(&scp.sync, &scp.frameRate), "java/lang/IllegalStateException", "unexpected error"); + if (env->ExceptionCheck()) { + return nullptr; + } ALOGV("getSyncSettings: %d %d %f %f", scp.sync.mSource, scp.sync.mAudioAdjustMode, scp.sync.mTolerance, scp.frameRate); diff --git a/media/jni/android_media_MediaPlayer2.cpp b/media/jni/android_media_MediaPlayer2.cpp index 918a375a6e83..6546cf024ac8 100644 --- a/media/jni/android_media_MediaPlayer2.cpp +++ b/media/jni/android_media_MediaPlayer2.cpp @@ -495,6 +495,9 @@ android_media_MediaPlayer2_getBufferingParams(JNIEnv *env, jobject thiz) process_media_player_call( env, thiz, mp->getBufferingSettings(&settings), "java/lang/IllegalStateException", "unexpected error"); + if (env->ExceptionCheck()) { + return nullptr; + } ALOGV("getBufferingSettings:{%s}", settings.toString().string()); return bp.asJobject(env, gBufferingParamsFields); @@ -662,6 +665,9 @@ android_media_MediaPlayer2_getPlaybackParams(JNIEnv *env, jobject thiz) process_media_player_call( env, thiz, mp->getPlaybackSettings(&audioRate), "java/lang/IllegalStateException", "unexpected error"); + if (env->ExceptionCheck()) { + return nullptr; + } ALOGV("getPlaybackSettings: %f %f %d %d", audioRate.mSpeed, audioRate.mPitch, audioRate.mFallbackMode, audioRate.mStretchMode); @@ -730,6 +736,9 @@ android_media_MediaPlayer2_getSyncParams(JNIEnv *env, jobject thiz) process_media_player_call( env, thiz, mp->getSyncSettings(&scp.sync, &scp.frameRate), "java/lang/IllegalStateException", "unexpected error"); + if (env->ExceptionCheck()) { + return nullptr; + } ALOGV("getSyncSettings: %d %d %f %f", scp.sync.mSource, scp.sync.mAudioAdjustMode, scp.sync.mTolerance, scp.frameRate);