From 37406331e11ef34d07f6de7a927f3c1f88ca530d Mon Sep 17 00:00:00 2001 From: Jim O'Donnell Date: Mon, 8 Jan 2024 10:08:17 +0000 Subject: [PATCH] [Security] Remove markdown-it-html5-embed - Add tests for images with audio and video URLs. - Remove `markdown-it-html5-embed`, which is quite old, depends on an outdated version of `markdown-it`, and loads in all of `mime-db` to check for audio or video URLs. - Replace `html5-embed` with `html5-media`, a plugin based on the `markdown-it-html5-media` plugin. - Use `mime/lite` to lookup MIME types for audio and video, in the browser. --- package-lock.json | 52 ++---- package.json | 5 +- src/lib/html5-media.js | 343 +++++++++++++++++++++++++++++++++++++ src/lib/utils.js | 4 +- test/use-markdownz-test.js | 2 +- test/utils-test.jsx | 20 ++- 6 files changed, 383 insertions(+), 43 deletions(-) create mode 100644 src/lib/html5-media.js diff --git a/package-lock.json b/package-lock.json index b220154..0dcb84a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,12 +16,12 @@ "markdown-it-container": "~4.0.0", "markdown-it-emoji": "~3.0.0", "markdown-it-footnote": "~4.0.0", - "markdown-it-html5-embed": "~1.0.0", "markdown-it-imsize": "~2.0.1", "markdown-it-sub": "~2.0.0", "markdown-it-sup": "~2.0.0", "markdown-it-table-of-contents": "~0.6.0", "markdown-it-video": "~0.6.3", + "mime": "~3.0.0", "rehype": "~11.0.0", "rehype-react": "~6.2.1" }, @@ -5843,15 +5843,6 @@ "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-4.0.0.tgz", "integrity": "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ==" }, - "node_modules/markdown-it-html5-embed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-html5-embed/-/markdown-it-html5-embed-1.0.0.tgz", - "integrity": "sha512-SPgugO/1+/9sZcgxoxijoTHSUpCUgFCNe1MSuTmDxDkV6NQrVzMclhRMFgE/rcHO+2rhIg3U7Oy80XA/E8ytpg==", - "dependencies": { - "markdown-it": "^8.4.0", - "mimoza": "~1.0.0" - } - }, "node_modules/markdown-it-imsize": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/markdown-it-imsize/-/markdown-it-imsize-2.0.1.tgz", @@ -5885,6 +5876,17 @@ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -5904,14 +5906,6 @@ "node": ">= 0.6" } }, - "node_modules/mimoza": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimoza/-/mimoza-1.0.0.tgz", - "integrity": "sha1-10qk/giTLwBeQwvce/z6lfyrTmI=", - "dependencies": { - "mime-db": "^1.6.0" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12286,15 +12280,6 @@ "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-4.0.0.tgz", "integrity": "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ==" }, - "markdown-it-html5-embed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-html5-embed/-/markdown-it-html5-embed-1.0.0.tgz", - "integrity": "sha512-SPgugO/1+/9sZcgxoxijoTHSUpCUgFCNe1MSuTmDxDkV6NQrVzMclhRMFgE/rcHO+2rhIg3U7Oy80XA/E8ytpg==", - "requires": { - "markdown-it": "~14.0.0", - "mimoza": "~1.0.0" - } - }, "markdown-it-imsize": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/markdown-it-imsize/-/markdown-it-imsize-2.0.1.tgz", @@ -12325,6 +12310,11 @@ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -12338,14 +12328,6 @@ "mime-db": "1.52.0" } }, - "mimoza": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimoza/-/mimoza-1.0.0.tgz", - "integrity": "sha1-10qk/giTLwBeQwvce/z6lfyrTmI=", - "requires": { - "mime-db": "^1.6.0" - } - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", diff --git a/package.json b/package.json index 768451a..682d456 100644 --- a/package.json +++ b/package.json @@ -68,16 +68,13 @@ "markdown-it-container": "~4.0.0", "markdown-it-emoji": "~3.0.0", "markdown-it-footnote": "~4.0.0", - "markdown-it-html5-embed": "~1.0.0", "markdown-it-imsize": "~2.0.1", "markdown-it-sub": "~2.0.0", "markdown-it-sup": "~2.0.0", "markdown-it-table-of-contents": "~0.6.0", "markdown-it-video": "~0.6.3", + "mime": "~3.0.0", "rehype": "~11.0.0", "rehype-react": "~6.2.1" - }, - "overrides": { - "markdown-it": "~14.0.0" } } diff --git a/src/lib/html5-media.js b/src/lib/html5-media.js new file mode 100644 index 0000000..449b4bf --- /dev/null +++ b/src/lib/html5-media.js @@ -0,0 +1,343 @@ +import mime from 'mime/lite'; + +/** + * A minimalist `markdown-it` plugin for parsing video/audio references inside + * markdown image syntax as `