Commit 53f50f7c by kimvde Committed by kim-vde

Ignore negative payload size in TS PesReader

Issue: #8005
PiperOrigin-RevId: 335625992
parent 39277ebe
......@@ -44,6 +44,8 @@
* Add TS extractor parameter to configure the number of bytes in which
to search for a timestamp to determine the duration and to seek.
([#7988](https://github.com/google/ExoPlayer/issues/7988)).
* Ignore negative payload size in PES packets
([#8005](https://github.com/google/ExoPlayer/issues/8005)).
* IMA extension:
* Fix position reporting after fetch errors
([#7956](https://github.com/google/ExoPlayer/issues/7956)).
......
......@@ -97,11 +97,11 @@ public final class PesReader implements TsPayloadReader {
Log.w(TAG, "Unexpected start indicator reading extended header");
break;
case STATE_READING_BODY:
// If payloadSize == -1 then the length of the previous packet was unspecified, and so
// we only know that it's finished now that we've seen the start of the next one. This
// is expected. If payloadSize != -1, then the length of the previous packet was known,
// but we didn't receive that amount of data. This is not expected.
if (payloadSize != -1) {
// If payloadSize is unset then the length of the previous packet was unspecified, and so
// we only know that it's finished now that we've seen the start of the next one. This is
// expected. If payloadSize is set, then the length of the previous packet was known, but
// we didn't receive that amount of data. This is not expected.
if (payloadSize != C.LENGTH_UNSET) {
Log.w(TAG, "Unexpected start indicator: expected " + payloadSize + " more bytes");
}
// Either way, notify the reader that it has now finished.
......@@ -136,13 +136,13 @@ public final class PesReader implements TsPayloadReader {
break;
case STATE_READING_BODY:
readLength = data.bytesLeft();
int padding = payloadSize == -1 ? 0 : readLength - payloadSize;
int padding = payloadSize == C.LENGTH_UNSET ? 0 : readLength - payloadSize;
if (padding > 0) {
readLength -= padding;
data.setLimit(data.getPosition() + readLength);
}
reader.consume(data);
if (payloadSize != -1) {
if (payloadSize != C.LENGTH_UNSET) {
payloadSize -= readLength;
if (payloadSize == 0) {
reader.packetFinished();
......@@ -191,7 +191,7 @@ public final class PesReader implements TsPayloadReader {
int startCodePrefix = pesScratch.readBits(24);
if (startCodePrefix != 0x000001) {
Log.w(TAG, "Unexpected start code prefix: " + startCodePrefix);
payloadSize = -1;
payloadSize = C.LENGTH_UNSET;
return false;
}
......@@ -208,10 +208,14 @@ public final class PesReader implements TsPayloadReader {
extendedHeaderLength = pesScratch.readBits(8);
if (packetLength == 0) {
payloadSize = -1;
payloadSize = C.LENGTH_UNSET;
} else {
payloadSize = packetLength + 6 /* packetLength does not include the first 6 bytes */
- HEADER_SIZE - extendedHeaderLength;
if (payloadSize < 0) {
Log.w(TAG, "Found negative packet payload size: " + payloadSize);
payloadSize = C.LENGTH_UNSET;
}
}
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment