diff --git a/src/env.cc b/src/env.cc index 2da45b82f1a..12a78a8dc3a 100644 --- a/src/env.cc +++ b/src/env.cc @@ -1169,7 +1169,7 @@ Environment::Environment(IsolateData* isolate_data, } } - if (first_argv != "inspect") { + if (!first_argv.empty() && first_argv != "-" && first_argv != "inspect") { options_->allow_fs_read.push_back(first_argv); } } diff --git a/test/parallel/test-permission-fs-read-entrypoint.js b/test/parallel/test-permission-fs-read-entrypoint.js index 631c793e135..f0182dce645 100644 --- a/test/parallel/test-permission-fs-read-entrypoint.js +++ b/test/parallel/test-permission-fs-read-entrypoint.js @@ -14,6 +14,7 @@ if (!common.hasCrypto) { const assert = require('assert'); const fixtures = require('../common/fixtures'); +const tmpdir = require('../common/tmpdir'); const { spawnSync } = require('child_process'); const file = fixtures.path('permission', 'hello-world.js'); @@ -36,3 +37,19 @@ const fsReadLoader = fixtures.path('permission', 'fs-read-loader.js'); ); assert.strictEqual(status, 0, `${arg0} Error: ${stderr.toString()}`); }); + +// When the code is read from stdin there is no entrypoint, so no implicit +// read access should be granted (in particular, not to the cwd). +tmpdir.refresh(); +[ + ['--permission'], + ['--permission', '-'], +].forEach((args) => { + const { status, stdout, stderr } = spawnSync(process.execPath, args, { + cwd: tmpdir.path, + input: 'console.log(process.permission.has("fs.read", ' + + 'require("path").join(process.cwd(), "x")))', + }); + assert.strictEqual(status, 0, `${args} Error: ${stderr.toString()}`); + assert.strictEqual(stdout.toString().trim(), 'false'); +});