diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-05-06 21:54:32 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-05-12 15:04:27 +0200 |
commit | f2a48c8245e93939987d2df1bfd5e9c42899b045 (patch) | |
tree | e7cdce782d97bdc76afba5f9ea95afd10f60b896 | |
parent | 1d31c6833df85cd913c241cdc4b4d702490fee7b (diff) | |
download | node-new-f2a48c8245e93939987d2df1bfd5e9c42899b045.tar.gz |
repl: do not run --eval code if there is none
`getOptionValue('--eval')` always returns a string, so it is never
loose-equal to `null`. Running eval makes some modifications to the
global object, including setting `module` to a different value, which
we want to avoid if possible.
Refs: https://github.com/nodejs/node/pull/27278
PR-URL: https://github.com/nodejs/node/pull/27587
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
-rw-r--r-- | lib/internal/main/repl.js | 5 | ||||
-rw-r--r-- | test/parallel/test-repl-cli-eval.js | 22 |
2 files changed, 24 insertions, 3 deletions
diff --git a/lib/internal/main/repl.js b/lib/internal/main/repl.js index 58afb2be98..b38102a154 100644 --- a/lib/internal/main/repl.js +++ b/lib/internal/main/repl.js @@ -46,10 +46,9 @@ cliRepl.createInternalRepl(process.env, (err, repl) => { // If user passed '-e' or '--eval' along with `-i` or `--interactive`, // evaluate the code in the current context. -const source = getOptionValue('--eval'); -if (source != null) { +if (getOptionValue('[has_eval_string]')) { evalScript('[eval]', - source, + getOptionValue('--eval'), getOptionValue('--inspect-brk'), getOptionValue('--print')); } diff --git a/test/parallel/test-repl-cli-eval.js b/test/parallel/test-repl-cli-eval.js new file mode 100644 index 0000000000..6069a20957 --- /dev/null +++ b/test/parallel/test-repl-cli-eval.js @@ -0,0 +1,22 @@ +'use strict'; +const common = require('../common'); +const child_process = require('child_process'); +const assert = require('assert'); + +// Regression test for https://github.com/nodejs/node/issues/27575: +// module.id === '<repl>' in the REPL. + +for (const extraFlags of [[], ['-e', '42']]) { + const flags = ['--interactive', ...extraFlags]; + const proc = child_process.spawn(process.execPath, flags, { + stdio: ['pipe', 'pipe', 'inherit'] + }); + proc.stdin.write('module.id\n.exit\n'); + + let stdout = ''; + proc.stdout.setEncoding('utf8'); + proc.stdout.on('data', (chunk) => stdout += chunk); + proc.stdout.on('end', common.mustCall(() => { + assert(stdout.includes('<repl>'), `stdout: ${stdout}`); + })); +} |