Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 365f0ab

Browse filesBrowse files
bfarias-godaddyaddaleax
authored andcommitted
esm: data URLs should ignore unknown parameters
PR-URL: #30593 Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com>
1 parent d4b6170 commit 365f0ab
Copy full SHA for 365f0ab

File tree

Expand file treeCollapse file tree

3 files changed

+43
-2
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+43
-2
lines changed
Open diff view settings
Collapse file

‎lib/internal/modules/esm/default_resolve.js‎

Copy file name to clipboardExpand all lines: lib/internal/modules/esm/default_resolve.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ function resolve(specifier, parentURL) {
5353
try {
5454
const parsed = new URL(specifier);
5555
if (parsed.protocol === 'data:') {
56-
const [ , mime ] = /^([^/]+\/[^;,]+)(;base64)?,/.exec(parsed.pathname) || [ null, null, null ];
56+
const [ , mime ] = /^([^/]+\/[^;,]+)(?:[^,]*?)(;base64)?,/.exec(parsed.pathname) || [ null, null, null ];
5757
const format = ({
5858
'__proto__': null,
5959
'text/javascript': 'module',
Collapse file

‎lib/internal/modules/esm/translators.js‎

Copy file name to clipboardExpand all lines: lib/internal/modules/esm/translators.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const debug = debuglog('esm');
3939
const translators = new SafeMap();
4040
exports.translators = translators;
4141

42-
const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(;base64)?,([\s\S]*)$/;
42+
const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(?:[^,]*?)(;base64)?,([\s\S]*)$/;
4343
function getSource(url) {
4444
const parsed = new URL(url);
4545
if (parsed.protocol === 'file:') {
Collapse file

‎test/es-module/test-esm-data-urls.js‎

Copy file name to clipboardExpand all lines: test/es-module/test-esm-data-urls.js
+41Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,47 @@ function createBase64URL(mime, body) {
3535
assert.deepStrictEqual(Object.keys(ns), ['default']);
3636
assert.deepStrictEqual(ns.default, plainESMURL);
3737
}
38+
{
39+
const body = 'export default import.meta.url;';
40+
const plainESMURL = createURL('text/javascript;charset=UTF-8', body);
41+
const ns = await import(plainESMURL);
42+
assert.deepStrictEqual(Object.keys(ns), ['default']);
43+
assert.deepStrictEqual(ns.default, plainESMURL);
44+
}
45+
{
46+
const body = 'export default import.meta.url;';
47+
const plainESMURL = createURL('text/javascript;charset="UTF-8"', body);
48+
const ns = await import(plainESMURL);
49+
assert.deepStrictEqual(Object.keys(ns), ['default']);
50+
assert.deepStrictEqual(ns.default, plainESMURL);
51+
}
52+
{
53+
const body = 'export default import.meta.url;';
54+
const plainESMURL = createURL('text/javascript;;a=a;b=b;;', body);
55+
const ns = await import(plainESMURL);
56+
assert.deepStrictEqual(Object.keys(ns), ['default']);
57+
assert.deepStrictEqual(ns.default, plainESMURL);
58+
}
59+
{
60+
const ns = await import('data:application/json;foo="test,"this"');
61+
assert.deepStrictEqual(Object.keys(ns), ['default']);
62+
assert.deepStrictEqual(ns.default, 'this');
63+
}
64+
{
65+
const ns = await import(`data:application/json;foo=${
66+
encodeURIComponent('test,')
67+
},0`);
68+
assert.deepStrictEqual(Object.keys(ns), ['default']);
69+
assert.deepStrictEqual(ns.default, 0);
70+
}
71+
{
72+
await assert.rejects(async () => {
73+
return import('data:application/json;foo="test,",0');
74+
}, {
75+
name: 'SyntaxError',
76+
message: /Unexpected end of JSON input/
77+
});
78+
}
3879
{
3980
const body = '{"x": 1}';
4081
const plainESMURL = createURL('application/json', body);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.