module: ensure 'node:'-only modules can access node_modules · nodejs/node@93c4dc5 · GitHub
Skip to content

Commit 93c4dc5

Browse files
authored
module: ensure 'node:'-only modules can access node_modules
This commit allows require() and import to search the node_modules directories when importing a core module that must have the node: scheme. This prevents these core modules from shadowing userland modules with the same name but no prefix. PR-URL: #42430 Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Beth Griggs <bgriggs@redhat.com> Reviewed-By: Richard Lau <rlau@redhat.com>
1 parent a058cef commit 93c4dc5

4 files changed

Lines changed: 52 additions & 18 deletions

File tree

lib/internal/modules/cjs/loader.js

Lines changed: 8 additions & 8 deletions

lib/internal/modules/esm/loader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,8 @@ class ESMLoader {
534534
globalThis,
535535
// Param getBuiltin
536536
(builtinName) => {
537-
if (NativeModule.canBeRequiredByUsers(builtinName)) {
537+
if (NativeModule.canBeRequiredByUsers(builtinName) &&
538+
NativeModule.canBeRequiredWithoutScheme(builtinName)) {
538539
return require(builtinName);
539540
}
540541
throw new ERR_INVALID_ARG_VALUE('builtinName', builtinName);

lib/internal/modules/esm/resolve.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ const {
5757
ERR_PACKAGE_PATH_NOT_EXPORTED,
5858
ERR_UNSUPPORTED_DIR_IMPORT,
5959
ERR_NETWORK_IMPORT_DISALLOWED,
60-
ERR_UNKNOWN_BUILTIN_MODULE,
6160
ERR_UNSUPPORTED_ESM_URL_SCHEME,
6261
} = require('internal/errors').codes;
6362
const { Module: CJSModule } = require('internal/modules/cjs/loader');
@@ -853,11 +852,8 @@ function parsePackageName(specifier, base) {
853852
* @returns {resolved: URL, format? : string}
854853
*/
855854
function packageResolve(specifier, base, conditions) {
856-
if (NativeModule.canBeRequiredByUsers(specifier)) {
857-
if (!NativeModule.canBeRequiredWithoutScheme(specifier)) {
858-
throw new ERR_UNKNOWN_BUILTIN_MODULE(specifier);
859-
}
860-
855+
if (NativeModule.canBeRequiredByUsers(specifier) &&
856+
NativeModule.canBeRequiredWithoutScheme(specifier)) {
861857
return new URL('node:' + specifier);
862858
}
863859

@@ -1041,7 +1037,8 @@ function checkIfDisallowedImport(specifier, parsed, parsedParentURL) {
10411037

10421038
return { url: parsed.href };
10431039
}
1044-
if (NativeModule.canBeRequiredByUsers(specifier)) {
1040+
if (NativeModule.canBeRequiredByUsers(specifier) &&
1041+
NativeModule.canBeRequiredWithoutScheme(specifier)) {
10451042
throw new ERR_NETWORK_IMPORT_DISALLOWED(
10461043
specifier,
10471044
parentURL,
Lines changed: 38 additions & 2 deletions

0 commit comments

Comments
 (0)