diff --git a/lib/util/mp4_parser.js b/lib/util/mp4_parser.js index b0f8a6a5f9..ee65a7a35d 100644 --- a/lib/util/mp4_parser.js +++ b/lib/util/mp4_parser.js @@ -111,6 +111,12 @@ shaka.util.Mp4Parser = class { parseNext(absStart, reader, partialOkay, stopOnPartial) { const start = reader.getPosition(); + // size(4 bytes) + type(4 bytes) = 8 bytes + if (stopOnPartial && start + 8 > reader.getLength()) { + this.done_ = true; + return; + } + let size = reader.readUint32(); const type = reader.readUint32(); const name = shaka.util.Mp4Parser.typeToString(type); @@ -122,6 +128,10 @@ shaka.util.Mp4Parser = class { size = reader.getLength() - start; break; case 1: + if (stopOnPartial && reader.getPosition() + 8 > reader.getLength()) { + this.done_ = true; + return; + } size = reader.readUint64(); has64BitSize = true; break; @@ -134,6 +144,10 @@ shaka.util.Mp4Parser = class { let flags = null; if (this.headers_[type] == shaka.util.Mp4Parser.BoxType_.FULL_BOX) { + if (stopOnPartial && reader.getPosition() + 4 > reader.getLength()) { + this.done_ = true; + return; + } const versionAndFlags = reader.readUint32(); version = versionAndFlags >>> 24; flags = versionAndFlags & 0xFFFFFF;