summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Lucas <evanlucas@me.com>2016-01-05 06:28:27 -0600
committerEvan Lucas <evanlucas@me.com>2016-01-16 13:21:53 -0600
commitda550aa063d00eee33e9c1ac5a6dccec0f4db638 (patch)
treefb7c27f7938e8b9670454ab694af3494e39b2e48
parent0ec093cd410b8797b02055a445d650f72fd16796 (diff)
downloadnode-new-da550aa063d00eee33e9c1ac5a6dccec0f4db638.tar.gz
repl: make sure historyPath is trimmed
If one were to set NODE_REPL_HISTORY to a string that contains only a space (" "), then the history file would be created with that name which can cause problems are certain systems. PR-URL: https://github.com/nodejs/node/pull/4539 Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
-rw-r--r--doc/api/repl.markdown2
-rw-r--r--lib/internal/repl.js13
-rw-r--r--test/parallel/test-repl-persistent-history.js5
3 files changed, 18 insertions, 2 deletions
diff --git a/doc/api/repl.markdown b/doc/api/repl.markdown
index b9d706beef..d045d7c433 100644
--- a/doc/api/repl.markdown
+++ b/doc/api/repl.markdown
@@ -37,7 +37,7 @@ via the following environment variables:
- `NODE_REPL_HISTORY` - When a valid path is given, persistent REPL history
will be saved to the specified file rather than `.node_repl_history` in the
user's home directory. Setting this value to `""` will disable persistent
- REPL history.
+ REPL history. Whitespace will be trimmed from the value.
- `NODE_REPL_HISTORY_SIZE` - defaults to `1000`. Controls how many lines of
history will be persisted if history is available. Must be a positive number.
- `NODE_REPL_MODE` - may be any of `sloppy`, `strict`, or `magic`. Defaults
diff --git a/lib/internal/repl.js b/lib/internal/repl.js
index e6b41fbdd8..371446a83b 100644
--- a/lib/internal/repl.js
+++ b/lib/internal/repl.js
@@ -55,15 +55,26 @@ function createRepl(env, opts, cb) {
}
const repl = REPL.start(opts);
- if (opts.terminal && env.NODE_REPL_HISTORY !== '') {
+ if (opts.terminal) {
return setupHistory(repl, env.NODE_REPL_HISTORY,
env.NODE_REPL_HISTORY_FILE, cb);
}
+
repl._historyPrev = _replHistoryMessage;
cb(null, repl);
}
function setupHistory(repl, historyPath, oldHistoryPath, ready) {
+ // Empty string disables persistent history.
+
+ if (typeof historyPath === 'string')
+ historyPath = historyPath.trim();
+
+ if (historyPath === '') {
+ repl._historyPrev = _replHistoryMessage;
+ return ready(null, repl);
+ }
+
if (!historyPath) {
try {
historyPath = path.join(os.homedir(), '.node_repl_history');
diff --git a/test/parallel/test-repl-persistent-history.js b/test/parallel/test-repl-persistent-history.js
index 81e728974f..387cef7e97 100644
--- a/test/parallel/test-repl-persistent-history.js
+++ b/test/parallel/test-repl-persistent-history.js
@@ -86,6 +86,11 @@ const tests = [
expected: [prompt, replDisabled, prompt]
},
{
+ env: { NODE_REPL_HISTORY: ' ' },
+ test: [UP],
+ expected: [prompt, replDisabled, prompt]
+ },
+ {
env: { NODE_REPL_HISTORY: '',
NODE_REPL_HISTORY_FILE: enoentHistoryPath },
test: [UP],