diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java b/library/extractor/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java index ba167a229a..f2d1debe72 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java @@ -327,7 +327,10 @@ public final class Cea708Decoder extends CeaDecoder { // 8.10.4 for more details. boolean cuesNeedUpdate = false; - while (serviceBlockPacket.bitsLeft() > 0) { + // Check we are protocol and buffer boundaries (buffer boundaries should never exceed + // protocol defined boundaries, but check to avoid crashes in case block is bad encoded) + int endBlockPosition = serviceBlockPacket.getPosition() + (blockSize * 8); + while (serviceBlockPacket.bitsLeft() > 0 && serviceBlockPacket.getPosition() < endBlockPosition) { int command = serviceBlockPacket.readBits(8); if (command != COMMAND_EXT1) { if (command <= GROUP_C0_END) {