From 2c4d1200c99dffb7d515b9b9951ef43c22bf7e47 Mon Sep 17 00:00:00 2001 From: "Alessandro Segala (ItalyPaleAle)" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sun, 17 Jul 2022 20:34:23 -0700 Subject: [PATCH] Fix: Malformed MKV could cause an infinite loop Co-authored-by: Sindre Sorhus --- core.js | 6 +++--- fixture/fixture-corrupt.mkv | Bin 0 -> 38047 bytes test.js | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 fixture/fixture-corrupt.mkv diff --git a/core.js b/core.js index 250b59ae..190fdda3 100644 --- a/core.js +++ b/core.js @@ -654,7 +654,7 @@ class FileTypeParser { let ic = 0; // 0 = A, 1 = B, 2 = C, 3 // = D - while ((msb & mask) === 0) { + while ((msb & mask) === 0 && mask !== 0) { ++ic; mask >>= 1; } @@ -675,7 +675,7 @@ class FileTypeParser { }; } - async function readChildren(level, children) { + async function readChildren(children) { while (children > 0) { const element = await readElement(); if (element.id === 0x42_82) { @@ -689,7 +689,7 @@ class FileTypeParser { } const re = await readElement(); - const docType = await readChildren(1, re.len); + const docType = await readChildren(re.len); switch (docType) { case 'webm': diff --git a/fixture/fixture-corrupt.mkv b/fixture/fixture-corrupt.mkv new file mode 100644 index 0000000000000000000000000000000000000000..31d6184e52af787f4ab5cb7ef64769fb27e941eb GIT binary patch literal 38047 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 literal 0 HcmV?d00001 diff --git a/test.js b/test.js index 05919946..e4e11927 100644 --- a/test.js +++ b/test.js @@ -614,3 +614,8 @@ test('supported files types are listed alphabetically', async t => { currentNode = currentNode.next; } }); + +test('corrupt MKV throws', async t => { + const filePath = path.join(__dirname, 'fixture/fixture-corrupt.mkv'); + await t.throwsAsync(fileTypeFromFile(filePath), {message: /out of range/}); +});