Skip to content

Commit ed41d3d

Browse files
committed
permission: add path separator to loader check
1 parent 629047d commit ed41d3d

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

lib/internal/modules/cjs/loader.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ function readPackageScope(checkPath) {
423423
checkPath = StringPrototypeSlice(checkPath, 0, separatorIndex);
424424
// Stop the search when the process doesn't have permissions
425425
// to walk upwards
426-
if (enabledPermission && !permission.has('fs.read', checkPath)) {
426+
if (enabledPermission && !permission.has('fs.read', checkPath + sep)) {
427427
return false;
428428
}
429429
if (StringPrototypeEndsWith(checkPath, sep + 'node_modules'))
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const fs = require('node:fs');
2+
3+
fs.readFile('/etc/passwd', () => {});

test/parallel/test-cli-permission-deny-fs.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
'use strict';
22

33
require('../common');
4+
5+
const fixtures = require('../common/fixtures');
46
const { spawnSync } = require('child_process');
57
const assert = require('assert');
68
const fs = require('fs');
9+
const path = require('path');
710

811
{
912
const { status, stdout } = spawnSync(
@@ -126,3 +129,21 @@ const fs = require('fs');
126129
assert.strictEqual(status, 1);
127130
assert.ok(!fs.existsSync('permission-deny-example.md'));
128131
}
132+
133+
{
134+
const firstPath = path.sep + process.cwd().split(path.sep, 2)[1];
135+
if (firstPath.startsWith('/etc')) {
136+
common.skip('/etc as firstPath');
137+
}
138+
const file = fixtures.path('permission', 'loader', 'index.js');
139+
const { status, stderr } = spawnSync(
140+
process.execPath,
141+
[
142+
'--experimental-permission',
143+
`--allow-fs-read=${firstPath}`,
144+
file,
145+
]
146+
);
147+
assert.match(stderr.toString(), /resource:\s+'\/etc\/passwd'/);
148+
assert.strictEqual(status, 1);
149+
}

0 commit comments

Comments
 (0)