Skip to content

Commit 21bfcaa

Browse files
committed
loader: make require.resolve throw error for unknown builtin modules
Fixes: #43274
1 parent 797e41c commit 21bfcaa

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

lib/internal/modules/cjs/loader.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -780,19 +780,19 @@ Module._load = function(request, parent, isMain) {
780780
}
781781
}
782782

783-
const filename = Module._resolveFilename(request, parent, isMain);
784-
if (StringPrototypeStartsWith(filename, 'node:')) {
783+
if (StringPrototypeStartsWith(request, 'node:')) {
785784
// Slice 'node:' prefix
786-
const id = StringPrototypeSlice(filename, 5);
785+
const id = StringPrototypeSlice(request, 5);
787786

788787
const module = loadNativeModule(id, request);
789788
if (!module?.canBeRequiredByUsers) {
790-
throw new ERR_UNKNOWN_BUILTIN_MODULE(filename);
789+
throw new ERR_UNKNOWN_BUILTIN_MODULE(request);
791790
}
792791

793792
return module.exports;
794793
}
795794

795+
const filename = Module._resolveFilename(request, parent, isMain);
796796
const cachedModule = Module._cache[filename];
797797
if (cachedModule !== undefined) {
798798
updateChildren(parent, cachedModule, true);
@@ -854,9 +854,14 @@ Module._load = function(request, parent, isMain) {
854854
};
855855

856856
Module._resolveFilename = function(request, parent, isMain, options) {
857-
if (StringPrototypeStartsWith(request, 'node:') ||
858-
(NativeModule.canBeRequiredByUsers(request) &&
859-
NativeModule.canBeRequiredWithoutScheme(request))) {
857+
if ((
858+
StringPrototypeStartsWith(request, 'node:') &&
859+
NativeModule.canBeRequiredByUsers(StringPrototypeSlice(request, 5))
860+
) ||
861+
(
862+
NativeModule.canBeRequiredByUsers(request) &&
863+
NativeModule.canBeRequiredWithoutScheme(request)
864+
)) {
860865
return request;
861866
}
862867

test/parallel/test-require-resolve.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,16 @@ require(fixtures.path('resolve-paths', 'default', 'verify-paths.js'));
8080
assert.strictEqual(resolvedPaths.includes('/node_modules'), false);
8181
});
8282
}
83+
84+
{
85+
assert.strictEqual(require.resolve('node:test'), 'node:test');
86+
assert.strictEqual(require.resolve('node:fs'), 'node:fs');
87+
88+
assert.throws(
89+
() => require.resolve('node:unknown'),
90+
{
91+
code: 'MODULE_NOT_FOUND',
92+
message: /^Cannot find module 'node:unknown'/,
93+
},
94+
);
95+
}

0 commit comments

Comments
 (0)