From fd7ee682c25035f5dbaa6d83311c686ae1415eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E9=81=93?= Date: Mon, 1 Jan 2024 01:49:52 +0800 Subject: [PATCH 1/4] load data url with search correctly --- lib/internal/modules/esm/load.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js index 5239bc8ed883a5..cb1c56cd7ff26f 100644 --- a/lib/internal/modules/esm/load.js +++ b/lib/internal/modules/esm/load.js @@ -30,7 +30,7 @@ const { ERR_UNSUPPORTED_ESM_URL_SCHEME, } = require('internal/errors').codes; -const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(?:[^,]*?)(;base64)?,([\s\S]*)$/; +const DATA_URL_PATTERN = /^data:[^/#]+\/[^,;#]+(?:[^,#]*?)(;base64)?,([^#]*)/; /** * @param {URL} url URL to the module @@ -45,7 +45,7 @@ async function getSource(url, context) { const { readFile: readFileAsync } = require('internal/fs/promises').exports; source = await readFileAsync(url); } else if (protocol === 'data:') { - const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname); + const match = RegExpPrototypeExec(DATA_URL_PATTERN, href); if (!match) { throw new ERR_INVALID_URL(responseURL); } @@ -84,7 +84,7 @@ function getSourceSync(url, context) { if (protocol === 'file:') { source = readFileSync(url); } else if (protocol === 'data:') { - const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname); + const match = RegExpPrototypeExec(DATA_URL_PATTERN, href); if (!match) { throw new ERR_INVALID_URL(responseURL); } From 4656da72578f638be03a9e6a58b77f3e92c7d21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E9=81=93?= Date: Mon, 1 Jan 2024 02:03:32 +0800 Subject: [PATCH 2/4] load data url with search correctly --- test/es-module/test-esm-data-urls.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/es-module/test-esm-data-urls.js b/test/es-module/test-esm-data-urls.js index 0817cf179df340..85d07cc56c07ef 100644 --- a/test/es-module/test-esm-data-urls.js +++ b/test/es-module/test-esm-data-urls.js @@ -112,4 +112,7 @@ function createBase64URL(mime, body) { const plainESMURL = `data:text/javascript,${encodeURIComponent(`import ${JSON.stringify(fixtures.fileURL('es-module-url', 'empty.js'))}`)}`; await import(plainESMURL); } + { + await import(`data:text/javascript,export%20let%20v='?';#`); + } })().then(common.mustCall()); From 1dff109b69085c0d6b0b5611db0395ba778c282a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E9=81=93?= Date: Mon, 1 Jan 2024 02:10:08 +0800 Subject: [PATCH 3/4] load data url with search correctly --- test/es-module/test-esm-data-urls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/es-module/test-esm-data-urls.js b/test/es-module/test-esm-data-urls.js index 85d07cc56c07ef..2f6a089bd9ac49 100644 --- a/test/es-module/test-esm-data-urls.js +++ b/test/es-module/test-esm-data-urls.js @@ -113,6 +113,6 @@ function createBase64URL(mime, body) { await import(plainESMURL); } { - await import(`data:text/javascript,export%20let%20v='?';#`); + await import(`data:text/javascript,'?'#~`); } })().then(common.mustCall()); From 2d1c351f160a0de12caef8ebd129cd014b7c8776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E9=81=93?= Date: Mon, 1 Jan 2024 03:25:53 +0800 Subject: [PATCH 4/4] load data url with search correctly --- test/es-module/test-esm-data-urls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/es-module/test-esm-data-urls.js b/test/es-module/test-esm-data-urls.js index 2f6a089bd9ac49..67fa1f69c3eba1 100644 --- a/test/es-module/test-esm-data-urls.js +++ b/test/es-module/test-esm-data-urls.js @@ -113,6 +113,6 @@ function createBase64URL(mime, body) { await import(plainESMURL); } { - await import(`data:text/javascript,'?'#~`); + await import('data:text/javascript,\'?\'#~'); } })().then(common.mustCall());