mirror of
https://github.com/androidx/media.git
synced 2025-05-06 23:20:42 +08:00
WAV: Don't read past data end position
Issue: #7129 PiperOrigin-RevId: 302660343
This commit is contained in:
parent
1d6bd0de15
commit
2094c7491b
@ -8,6 +8,8 @@
|
||||
([#6885](https://github.com/google/ExoPlayer/issues/6885)).
|
||||
* Allow missing hours in SubRip (.srt) timecodes
|
||||
([#7122](https://github.com/google/ExoPlayer/issues/7122)).
|
||||
* WAV: Fix failure to play WAV files that contain trailing non-media bytes
|
||||
([#7129](https://github.com/google/ExoPlayer/issues/7129))
|
||||
* UI: Add an option to set whether to use the orientation sensor for rotation
|
||||
in spherical playbacks
|
||||
([#6761](https://github.com/google/ExoPlayer/issues/6761)).
|
||||
|
@ -259,14 +259,14 @@ public final class WavExtractor implements Extractor {
|
||||
public boolean sampleData(ExtractorInput input, long bytesLeft)
|
||||
throws IOException, InterruptedException {
|
||||
// Write sample data until we've reached the target sample size, or the end of the data.
|
||||
boolean endOfSampleData = bytesLeft == 0;
|
||||
while (!endOfSampleData && pendingOutputBytes < targetSampleSizeBytes) {
|
||||
while (bytesLeft > 0 && pendingOutputBytes < targetSampleSizeBytes) {
|
||||
int bytesToRead = (int) Math.min(targetSampleSizeBytes - pendingOutputBytes, bytesLeft);
|
||||
int bytesAppended = trackOutput.sampleData(input, bytesToRead, true);
|
||||
if (bytesAppended == RESULT_END_OF_INPUT) {
|
||||
endOfSampleData = true;
|
||||
bytesLeft = 0;
|
||||
} else {
|
||||
pendingOutputBytes += bytesAppended;
|
||||
bytesLeft -= bytesAppended;
|
||||
}
|
||||
}
|
||||
|
||||
@ -288,7 +288,7 @@ public final class WavExtractor implements Extractor {
|
||||
pendingOutputBytes = offset;
|
||||
}
|
||||
|
||||
return endOfSampleData;
|
||||
return bytesLeft <= 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
BIN
library/core/src/test/assets/wav/sample_with_trailing_bytes.wav
Normal file
BIN
library/core/src/test/assets/wav/sample_with_trailing_bytes.wav
Normal file
Binary file not shown.
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.google.android.exoplayer2.extractor.wav;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.testutil.ExtractorAsserts;
|
||||
import org.junit.Test;
|
||||
@ -30,7 +31,7 @@ public final class WavExtractorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSampleImaAdpcm() throws Exception {
|
||||
public void sample_imaAdpcm() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(WavExtractor::new, "wav/sample_ima_adpcm.wav");
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user