diff --git a/lib/execjs/support/jsc_runner.js b/lib/execjs/support/jsc_runner.js index c57a944..b7188a5 100644 --- a/lib/execjs/support/jsc_runner.js +++ b/lib/execjs/support/jsc_runner.js @@ -2,6 +2,7 @@ }, function(program) { var output; try { + delete this.console; result = program(); if (typeof result == 'undefined' && result !== null) { print('["ok"]'); diff --git a/lib/execjs/support/node_runner.js b/lib/execjs/support/node_runner.js index ab0c6ec..2987d9f 100644 --- a/lib/execjs/support/node_runner.js +++ b/lib/execjs/support/node_runner.js @@ -1,10 +1,20 @@ -(function(program, execJS) { execJS(program) })(function(global, module, exports, require, console, setTimeout, setInterval, clearTimeout, clearInterval, setImmediate, clearImmediate) { #{source} +(function(program, execJS) { execJS(program) })(function(global, process, module, exports, require, console, setTimeout, setInterval, clearTimeout, clearInterval, setImmediate, clearImmediate) { #{source} }, function(program) { var output, print = function(string) { process.stdout.write('' + string); }; try { + var __process__ = process; + delete this.process; + delete this.console; + delete this.setTimeout; + delete this.setInterval; + delete this.clearTimeout; + delete this.clearInterval; + delete this.setImmediate; + delete this.clearImmediate; result = program(); + this.process = __process__; if (typeof result == 'undefined' && result !== null) { print('["ok"]'); } else { @@ -15,6 +25,7 @@ } } } catch (err) { + this.process = __process__; print(JSON.stringify(['err', '' + err, err.stack])); } }); diff --git a/test/test_execjs.rb b/test/test_execjs.rb index 7fd967f..0ee411f 100644 --- a/test/test_execjs.rb +++ b/test/test_execjs.rb @@ -237,14 +237,24 @@ class TestExecJS < Test assert ExecJS.eval("typeof global == 'undefined'") end + def test_node_process_is_undefined + assert ExecJS.eval("typeof process == 'undefined'") + refute ExecJS.eval("'process' in this") + end + def test_commonjs_vars_are_undefined assert ExecJS.eval("typeof module == 'undefined'") assert ExecJS.eval("typeof exports == 'undefined'") assert ExecJS.eval("typeof require == 'undefined'") + + refute ExecJS.eval("'module' in this") + refute ExecJS.eval("'exports' in this") + refute ExecJS.eval("'require' in this") end def test_console_is_undefined assert ExecJS.eval("typeof console == 'undefined'") + refute ExecJS.eval("'console' in this") end def test_timers_are_undefined @@ -254,6 +264,13 @@ class TestExecJS < Test assert ExecJS.eval("typeof clearInterval == 'undefined'") assert ExecJS.eval("typeof setImmediate == 'undefined'") assert ExecJS.eval("typeof clearImmediate == 'undefined'") + + refute ExecJS.eval("'setTimeout' in this") + refute ExecJS.eval("'setInterval' in this") + refute ExecJS.eval("'clearTimeout' in this") + refute ExecJS.eval("'clearInterval' in this") + refute ExecJS.eval("'setImmediate' in this") + refute ExecJS.eval("'clearImmediate' in this") end def test_compile_large_scripts