mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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.
|
* Prevent multiple instances of SimpleCache in the same folder.
|
||||||
Previous instance must be released.
|
Previous instance must be released.
|
||||||
* DRM: Allow multiple listeners for `DefaultDrmSessionManager`.
|
* 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
|
* Fix ANR issue on Redmi 4X and Redmi Note 4
|
||||||
([#4006](https://github.com/google/ExoPlayer/issues/4006)).
|
([#4006](https://github.com/google/ExoPlayer/issues/4006)).
|
||||||
* Removed default renderer time offset of 60000000 from internal player. The
|
* 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 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.
|
* @return The read string value.
|
||||||
* @throws IOException If an error occurs reading from the input.
|
* @throws IOException If an error occurs reading from the input.
|
||||||
* @throws InterruptedException If the thread is interrupted.
|
* @throws InterruptedException If the thread is interrupted.
|
||||||
|
|
@ -224,7 +225,12 @@ import java.util.Stack;
|
||||||
}
|
}
|
||||||
byte[] stringBytes = new byte[byteLength];
|
byte[] stringBytes = new byte[byteLength];
|
||||||
input.readFully(stringBytes, 0, 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);
|
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
|
@Test
|
||||||
public void testStringElementEmpty() throws IOException, InterruptedException {
|
public void testStringElementEmpty() throws IOException, InterruptedException {
|
||||||
ExtractorInput input = createTestInput(0x42, 0x82, 0x80);
|
ExtractorInput input = createTestInput(0x42, 0x82, 0x80);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue