From e02d28c7656e2fc7183c9a1b4a004c721306c97e Mon Sep 17 00:00:00 2001 From: Percy Tse Date: Tue, 18 May 2021 01:01:12 +0800 Subject: [PATCH] fix(LL-DASH): Fix index out of bound issue when parsing mp4 segment (#3403) Fixes #3402 --- lib/util/mp4_parser.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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;