Skip to content

Commit

Permalink
esm: identify parent importing a url with invalid host
Browse files Browse the repository at this point in the history
PR-URL: #49736
Backport-PR-URL: #50669
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
  • Loading branch information
JakobJingleheimer authored and targos committed Nov 23, 2023
1 parent 73a7e00 commit ed8dd33
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
11 changes: 10 additions & 1 deletion lib/internal/modules/esm/resolve.js
Expand Up @@ -255,7 +255,16 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
resolved.pathname, 'must not include encoded "/" or "\\" characters',
fileURLToPath(base));

let path = fileURLToPath(resolved);
let path;
try {
path = fileURLToPath(resolved);
} catch (err) {
const { setOwnProperty } = require('internal/util');
setOwnProperty(err, 'input', `${resolved}`);
setOwnProperty(err, 'module', `${base}`);
throw err;
}

if (getOptionValue('--experimental-specifier-resolution') === 'node') {
let file = resolveExtensionsWithTryExactName(resolved);

Expand Down
14 changes: 14 additions & 0 deletions test/es-module/test-esm-loader-default-resolver.mjs
Expand Up @@ -49,4 +49,18 @@ describe('default resolver', () => {
assert.strictEqual(stdout.trim(), 'index.byoe!');
assert.strictEqual(stderr, '');
});

it('should identify the parent module of an invalid URL host in import specifier', async () => {
if (process.platform === 'win32') return;

const { code, stderr } = await spawnPromisified(execPath, [
'--no-warnings',
fixtures.path('es-modules', 'invalid-posix-host.mjs'),
]);

assert.match(stderr, /ERR_INVALID_FILE_URL_HOST/);
assert.match(stderr, /file:\/\/hmm\.js/);
assert.match(stderr, /invalid-posix-host\.mjs/);
assert.strictEqual(code, 1);
});
});
1 change: 1 addition & 0 deletions test/fixtures/es-modules/invalid-posix-host.mjs
@@ -0,0 +1 @@
import "file://hmm.js";

0 comments on commit ed8dd33

Please sign in to comment.