From d2db0bb74a75c638c08d7db0b964af7539afb9e1 Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 12 Oct 2020 13:16:42 +0100 Subject: [PATCH] Ensure ParsableByteArray is large enough when appending in VorbisReader PiperOrigin-RevId: 336643621 --- .../android/exoplayer2/extractor/ogg/VorbisReader.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java index 7cc193e698..6a8068eedb 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java @@ -25,6 +25,7 @@ import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.ParsableByteArray; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; /** * {@link StreamReader} to extract Vorbis data out of Ogg byte stream. @@ -160,8 +161,11 @@ import java.util.ArrayList; @VisibleForTesting /* package */ static void appendNumberOfSamples( ParsableByteArray buffer, long packetSampleCount) { - - buffer.setLimit(buffer.limit() + 4); + if (buffer.capacity() < buffer.limit() + 4) { + buffer.reset(Arrays.copyOf(buffer.getData(), buffer.limit() + 4)); + } else { + buffer.setLimit(buffer.limit() + 4); + } // The vorbis decoder expects the number of samples in the packet // to be appended to the audio data as an int32 byte[] data = buffer.getData();