mirror of
https://github.com/samsonjs/media.git
synced 2026-03-30 10:15:48 +00:00
Trim zero padding from EBML string values
Issue #4010 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=190442962
This commit is contained in:
parent
40947d52f0
commit
dfe4bfba03
3 changed files with 19 additions and 3 deletions
|
|
@ -34,6 +34,8 @@
|
|||
* Prevent multiple instances of SimpleCache in the same folder.
|
||||
Previous instance must be released.
|
||||
* DRM: Allow multiple listeners for `DefaultDrmSessionManager`.
|
||||
* Fix handling of zero padded strings when parsing Matroska streams
|
||||
([#4010](https://github.com/google/ExoPlayer/issues/4010)).
|
||||
* Fix ANR issue on Redmi 4X and Redmi Note 4
|
||||
([#4006](https://github.com/google/ExoPlayer/issues/4006)).
|
||||
* Removed default renderer time offset of 60000000 from internal player. The
|
||||
|
|
|
|||
|
|
@ -209,10 +209,11 @@ import java.util.Stack;
|
|||
}
|
||||
|
||||
/**
|
||||
* Reads and returns a string of length {@code byteLength} from the {@link ExtractorInput}.
|
||||
* Reads a string of length {@code byteLength} from the {@link ExtractorInput}. Zero padding is
|
||||
* removed, so the returned string may be shorter than {@code byteLength}.
|
||||
*
|
||||
* @param input The {@link ExtractorInput} from which to read.
|
||||
* @param byteLength The length of the float being read.
|
||||
* @param byteLength The length of the string being read, including zero padding.
|
||||
* @return The read string value.
|
||||
* @throws IOException If an error occurs reading from the input.
|
||||
* @throws InterruptedException If the thread is interrupted.
|
||||
|
|
@ -224,7 +225,12 @@ import java.util.Stack;
|
|||
}
|
||||
byte[] stringBytes = new byte[byteLength];
|
||||
input.readFully(stringBytes, 0, byteLength);
|
||||
return new String(stringBytes);
|
||||
// Remove zero padding.
|
||||
int trimmedLength = byteLength;
|
||||
while (trimmedLength > 0 && stringBytes[trimmedLength - 1] == 0) {
|
||||
trimmedLength--;
|
||||
}
|
||||
return new String(stringBytes, 0, trimmedLength);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -89,6 +89,14 @@ public class DefaultEbmlReaderTest {
|
|||
assertEvents(input, expected.events);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringElementWithZeroPadding() throws IOException, InterruptedException {
|
||||
ExtractorInput input = createTestInput(0x42, 0x82, 0x86, 0x41, 0x62, 0x63, 0x00, 0x00, 0x00);
|
||||
TestOutput expected = new TestOutput();
|
||||
expected.stringElement(TestOutput.ID_DOC_TYPE, "Abc");
|
||||
assertEvents(input, expected.events);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringElementEmpty() throws IOException, InterruptedException {
|
||||
ExtractorInput input = createTestInput(0x42, 0x82, 0x80);
|
||||
|
|
|
|||
Loading…
Reference in a new issue