Fix CtsSecurityTestCases test_cve_2016_2499 fail
android.security.cts.MediaRecorderInfoLeakTest#test_cve_2016_2499
Bug: 151581582
Bug: 72507587
Test: Build CTS
Test: run cts -m CtsSecurityTestCases -t
android.security.cts.MediaRecorderInfoLeakTest#test_cve_2016_2499
Change-Id: Ifd9fc521b39d7352e442bbf25aaca7d571728394
Merged-In: Ifd9fc521b39d7352e442bbf25aaca7d571728394
(cherry picked from commit f5160f790ca77452e60d16f179978925796c5ef0)
diff --git a/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java b/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
index 0277338..af62105 100644
--- a/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
+++ b/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
@@ -19,6 +19,7 @@
import android.platform.test.annotations.SecurityTest;
import android.media.MediaRecorder;
import android.test.AndroidTestCase;
+import android.util.Log;
import java.io.File;
@@ -32,24 +33,46 @@
public void test_cve_2016_2499() throws Exception {
MediaRecorder mediaRecorder = null;
long end = System.currentTimeMillis() + 600_000; // 10 minutes from now
+ String TAG = "MediaRecorderInfoLeakTest";
+ boolean recorderPrepare = false;
+ int retryCount = 2;
+
try {
while(System.currentTimeMillis() < end) {
- mediaRecorder = new MediaRecorder();
- mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
- mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
- mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
- mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
- mediaRecorder.setVideoFrameRate(30);
- mediaRecorder.setVideoSize(352, 288);
- mediaRecorder.setOutputFile(
- new File(getContext().getFilesDir(), "record.output").getPath());
- mediaRecorder.prepare();
- int test = mediaRecorder.getMaxAmplitude();
- mediaRecorder.reset();
- mediaRecorder.release();
- if(test != 0){
- fail("MediaRecorderInfoLeakTest failed");
+ recorderPrepare = false;
+ for (int i = 0; i < retryCount; i++) {
+ try {
+ mediaRecorder = new MediaRecorder();
+ mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
+ mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
+ mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
+ mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
+ mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
+ mediaRecorder.setVideoFrameRate(30);
+ mediaRecorder.setVideoSize(352, 288);
+ mediaRecorder.setOutputFile(
+ new File(getContext().getFilesDir(), "record.output").getPath());
+ mediaRecorder.prepare();
+ recorderPrepare = true;
+ break;
+ } catch (Exception ex) {
+ Log.w(TAG, "Media Recorder Prepare Exception" + ex.getMessage());
+ Thread.sleep(200);
+ } finally {
+ if (recorderPrepare == false && mediaRecorder != null){
+ mediaRecorder.release();
+ }
+ }
+ }
+ if(recorderPrepare){
+ int test = mediaRecorder.getMaxAmplitude();
+ mediaRecorder.reset();
+ mediaRecorder.release();
+ if(test != 0){
+ fail("MediaRecorderInfoLeakTest failed");
+ }
+ } else {
+ fail("Media Recorder prepare fail");
}
}
} catch (Exception e) {