From 3d487dae404e5044aa5a45a76fc59f4ec3ef0292 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Wed, 24 Mar 2021 09:52:46 +0000 Subject: [PATCH] Add missing switch case Before this change, calling read after reaching the end of input in an Ogg file would cause an IllegalStateException. PiperOrigin-RevId: 364758873 --- .../exoplayer2/extractor/ogg/StreamReader.java | 2 ++ .../ogg/OggExtractorNonParameterizedTest.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/StreamReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/StreamReader.java index 54221d3e5a..f160655459 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/StreamReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/StreamReader.java @@ -119,6 +119,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; case STATE_READ_PAYLOAD: castNonNull(oggSeeker); return readPayload(input, seekPosition); + case STATE_END_OF_INPUT: + return C.RESULT_END_OF_INPUT; default: // Never happens. throw new IllegalStateException(); diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorNonParameterizedTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorNonParameterizedTest.java index f25f97eaa2..d939d51b77 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorNonParameterizedTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorNonParameterizedTest.java @@ -16,11 +16,15 @@ package com.google.android.exoplayer2.extractor.ogg; import static com.google.android.exoplayer2.testutil.TestUtil.getByteArray; +import static com.google.common.truth.Truth.assertThat; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.extractor.PositionHolder; import com.google.android.exoplayer2.testutil.ExtractorAsserts; import com.google.android.exoplayer2.testutil.FakeExtractorInput; +import com.google.android.exoplayer2.testutil.FakeExtractorOutput; import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,6 +38,19 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class OggExtractorNonParameterizedTest { + @Test + public void read_afterEndOfInput_doesNotThrowIllegalState() throws Exception { + byte[] data = + getByteArray(ApplicationProvider.getApplicationContext(), "media/ogg/bear_flac.ogg"); + FakeExtractorInput input = new FakeExtractorInput.Builder().setData(data).build(); + OggExtractor oggExtractor = new OggExtractor(); + oggExtractor.init(new FakeExtractorOutput()); + // We feed data to the extractor until the end of input is reached. + while (oggExtractor.read(input, new PositionHolder()) != C.RESULT_END_OF_INPUT) {} + // We call read again to check that it does not throw an IllegalStateException. + assertThat(oggExtractor.read(input, new PositionHolder())).isEqualTo(C.RESULT_END_OF_INPUT); + } + @Test public void sniffVorbis() throws Exception { byte[] data =