mirror of
https://github.com/androidx/media.git
synced 2025-05-15 19:49:50 +08: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
da6ec9cafe
commit
febe604ca1
@ -6,6 +6,8 @@
|
|||||||
([#3779](https://github.com/google/ExoPlayer/issues/3779)).
|
([#3779](https://github.com/google/ExoPlayer/issues/3779)).
|
||||||
* 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)).
|
||||||
|
* Fix handling of zero padded strings when parsing Matroska streams
|
||||||
|
([#4010](https://github.com/google/ExoPlayer/issues/4010)).
|
||||||
* MediaSession extension: Omit fast forward and rewind actions when media is not
|
* MediaSession extension: Omit fast forward and rewind actions when media is not
|
||||||
seekable ([#4001](https://github.com/google/ExoPlayer/issues/4001)).
|
seekable ([#4001](https://github.com/google/ExoPlayer/issues/4001)).
|
||||||
|
|
||||||
|
@ -202,10 +202,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.
|
||||||
@ -217,7 +218,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…
x
Reference in New Issue
Block a user