diff --git a/src/node_main.cc b/src/node_main.cc index dce72aff22f317..02082ba0169c83 100644 --- a/src/node_main.cc +++ b/src/node_main.cc @@ -11,7 +11,7 @@ int wmain(int argc, wchar_t *wargv[]) { } // Convert argv to to UTF8 - char** argv = new char*[argc]; + char** argv = new char*[argc + 1]; for (int i = 0; i < argc; i++) { // Compute the size of the required buffer DWORD size = WideCharToMultiByte(CP_UTF8, @@ -43,6 +43,7 @@ int wmain(int argc, wchar_t *wargv[]) { exit(1); } } + argv[argc] = nullptr; // Now that conversion is done, we can finally start. return node::Start(argc, argv); } diff --git a/test/parallel/test-cli-eval.js b/test/parallel/test-cli-eval.js index a58c023eb6d835..f22084bc690395 100644 --- a/test/parallel/test-cli-eval.js +++ b/test/parallel/test-cli-eval.js @@ -40,11 +40,11 @@ child.exec(nodejs + ' --eval "console.error(42)"', assert.equal(stderr, ''); }); - child.exec(cmd + "'[]'", + child.exec(cmd + "'[]'", common.mustCall( function(err, stdout, stderr) { assert.equal(stdout, '[]\n'); assert.equal(stderr, ''); - }); + })); }); // assert that module loading works @@ -66,6 +66,12 @@ child.exec(nodejs + ' --eval "require(\'./test/parallel/test-cli-eval.js\')"', assert.equal(status.code, 42); }); +// Missing argument should not crash +child.exec(nodejs + ' -e', common.mustCall(function(status, stdout, stderr) { + assert.notStrictEqual(status, null); + assert.strictEqual(status.code, 9); +})); + // empty program should do nothing child.exec(nodejs + ' -e ""', function(status, stdout, stderr) { assert.equal(stdout, '');