repl: fix crashes when buffering command
authorMaciej Małecki <maciej.malecki@notimplemented.org>
Tue, 3 Jul 2012 02:13:24 +0000 (04:13 +0200)
committerNathan Rajlich <nathan@tootallnate.net>
Wed, 4 Jul 2012 18:22:10 +0000 (11:22 -0700)
Wrong order of operands was causing problems while trying to use command
buffering:

    > {
    ...   a: 3,
    ...

    repl.js:284
            if (cmd.trim().match(/^npm /) && !self.bufferedCommand) {
                    ^
    TypeError: Cannot call method 'trim' of undefined
        at finish (repl.js:284:17)
        at REPLServer.self.eval (repl.js:118:5)
        at rli.on.e (repl.js:260:20)
        at REPLServer.self.eval (repl.js:118:5)
        at Interface.<anonymous> (repl.js:250:12)
        at Interface.EventEmitter.emit (events.js:88:17)
        at Interface._onLine (readline.js:183:10)
        at Interface._line (readline.js:502:8)
        at Interface._ttyWrite (readline.js:720:14)
        at ReadStream.<anonymous> (readline.js:105:12)

Test included.

Closes #3515.
Closes #3517.
Closes #3621.

lib/repl.js
test/simple/test-repl.js

index 4eac059..29c6d0e 100644 (file)
@@ -281,7 +281,7 @@ function REPLServer(prompt, stream, eval, useGlobal, ignoreUndefined) {
 
       // If error was SyntaxError and not JSON.parse error
       if (isSyntaxError(e)) {
-        if (cmd.trim().match(/^npm /) && !self.bufferedCommand) {
+        if (!self.bufferedCommand && cmd.trim().match(/^npm /)) {
           self.outputStream.write('npm should be run outside of the ' +
                                   'node repl, in your normal shell.\n' +
                                   '(Press Control-D to exit.)\n');
index ae20a19..dccff9c 100644 (file)
@@ -150,7 +150,9 @@ function error_test() {
       expect: '1' },
     // npm prompt error message
     { client: client_unix, send: 'npm install foobar',
-      expect: expect_npm }
+      expect: expect_npm },
+    { client: client_unix, send: '(function () {\n\nreturn 1;\n})()',
+      expect: '1' }
   ]);
 }