-
Notifications
You must be signed in to change notification settings - Fork 30k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
src: allow CLI args in env with NODE_OPTIONS
Not all CLI options are supported, those that are problematic from a security or implementation point of view are disallowed, as are ones that are inappropriate (for example, -e, -p, --i), or that only make sense when changed with code changes (such as options that change the javascript syntax or add new APIs). PR-URL: #12028 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Bradley Farias <bradley.meck@gmail.com>
- Loading branch information
1 parent
e522bcd
commit f2282bb
Showing
6 changed files
with
261 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
'use strict'; | ||
const common = require('../common'); | ||
if (process.config.variables.node_without_node_options) | ||
return common.skip('missing NODE_OPTIONS support'); | ||
|
||
// Test options specified by env variable. | ||
|
||
const assert = require('assert'); | ||
const exec = require('child_process').execFile; | ||
|
||
disallow('--version'); | ||
disallow('-v'); | ||
disallow('--help'); | ||
disallow('-h'); | ||
disallow('--eval'); | ||
disallow('-e'); | ||
disallow('--print'); | ||
disallow('-p'); | ||
disallow('-pe'); | ||
disallow('--check'); | ||
disallow('-c'); | ||
disallow('--interactive'); | ||
disallow('-i'); | ||
disallow('--v8-options'); | ||
disallow('--'); | ||
|
||
function disallow(opt) { | ||
const options = {env: {NODE_OPTIONS: opt}}; | ||
exec(process.execPath, options, common.mustCall(function(err) { | ||
const message = err.message.split(/\r?\n/)[1]; | ||
const expect = process.execPath + ': ' + opt + | ||
' is not allowed in NODE_OPTIONS'; | ||
|
||
assert.strictEqual(err.code, 9); | ||
assert.strictEqual(message, expect); | ||
})); | ||
} | ||
|
||
const printA = require.resolve('../fixtures/printA.js'); | ||
|
||
expect('-r ' + printA, 'A\nB\n'); | ||
expect('--no-deprecation', 'B\n'); | ||
expect('--no-warnings', 'B\n'); | ||
expect('--trace-warnings', 'B\n'); | ||
expect('--redirect-warnings=_', 'B\n'); | ||
expect('--trace-deprecation', 'B\n'); | ||
expect('--trace-sync-io', 'B\n'); | ||
expect('--trace-events-enabled', 'B\n'); | ||
expect('--track-heap-objects', 'B\n'); | ||
expect('--throw-deprecation', 'B\n'); | ||
expect('--zero-fill-buffers', 'B\n'); | ||
expect('--v8-pool-size=10', 'B\n'); | ||
expect('--use-openssl-ca', 'B\n'); | ||
expect('--use-bundled-ca', 'B\n'); | ||
expect('--openssl-config=_ossl_cfg', 'B\n'); | ||
expect('--icu-data-dir=_d', 'B\n'); | ||
|
||
// V8 options | ||
expect('--max_old_space_size=0', 'B\n'); | ||
|
||
function expect(opt, want) { | ||
const printB = require.resolve('../fixtures/printB.js'); | ||
const argv = [printB]; | ||
const opts = { | ||
env: {NODE_OPTIONS: opt}, | ||
maxBuffer: 1000000000, | ||
}; | ||
exec(process.execPath, argv, opts, common.mustCall(function(err, stdout) { | ||
assert.ifError(err); | ||
if (!RegExp(want).test(stdout)) { | ||
console.error('For %j, failed to find %j in: <\n%s\n>', | ||
opt, expect, stdout); | ||
assert(false, 'Expected ' + expect); | ||
} | ||
})); | ||
} |
Oops, something went wrong.