0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00

repl: preventing REPL crash with inherited properties

When an inherited property is used as a REPL keyword, the REPL crashes.

    ➜  Desktop  iojs
    > process.version
    'v2.3.4'
    > .toString
    readline.js:913
            stream[ESCAPE_DECODER].next(r[i]);
                                    ^
    TypeError: Cannot read property 'call' of undefined
        at REPLServer.parseREPLKeyword (repl.js:746:15)
        at REPLServer.<anonymous> (repl.js:284:16)
        at emitOne (events.js:77:13)
        at REPLServer.emit (events.js:169:7)
        at REPLServer.Interface._onLine (readline.js:210:10)
        at REPLServer.Interface._line (readline.js:549:8)
        at REPLServer.Interface._ttyWrite (readline.js:826:14)
        at ReadStream.onkeypress (readline.js:105:10)
        at emitTwo (events.js:87:13)
        at ReadStream.emit (events.js:172:7)
    ➜  Desktop

This patch makes the internal `commands` object inherit from `null` so
that there will be no inherited properties.

    > process.version
    'v2.3.5-pre'
    > .toString
    Invalid REPL keyword
    >

PR-URL: https://github.com/nodejs/io.js/pull/2163
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
Sakthipriyan Vairamani 2015-07-12 00:58:20 +00:00
parent 77fa385e5d
commit 30edb5aee9
2 changed files with 5 additions and 1 deletions

View File

@ -217,7 +217,7 @@ function REPLServer(prompt,
self.setPrompt(prompt !== undefined ? prompt : '> ');
this.commands = {};
this.commands = Object.create(null);
defineDefaultCommands(this);
// figure out which "writer" function to use

View File

@ -194,6 +194,10 @@ function error_test() {
// the error message
{ client: client_unix, send: '.invalid_repl_command',
expect: 'Invalid REPL keyword\n' + prompt_unix },
// this makes sure that we don't crash when we use an inherited property as
// a REPL command
{ client: client_unix, send: '.toString',
expect: 'Invalid REPL keyword\n' + prompt_unix },
]);
}