diff --git a/test/sandbox.js b/test/sandbox.js index 9a9d8a5e..eb9f1f0f 100644 --- a/test/sandbox.js +++ b/test/sandbox.js @@ -1,9 +1,25 @@ var vm = require("vm"); +function safe_log(arg) { + if (arg) switch (typeof arg) { + case "function": + return arg.toString(); + case "object": + if (/Error$/.test(arg.name)) return arg.toString(); + arg.constructor.toString(); + for (var key in arg) { + arg[key] = safe_log(arg[key]); + } + } + return arg; +} + var FUNC_TOSTRING = [ "Function.prototype.toString = Function.prototype.valueOf = function() {", " var id = 0;", " return function() {", + ' if (this === Array) return "[Function: Array]";', + ' if (this === Object) return "[Function: Object]";', " var i = this.name;", ' if (typeof i != "number") {', " i = ++id;", @@ -32,16 +48,7 @@ exports.run_code = function(code) { ].join("\n"), { console: { log: function() { - return console.log.apply(console, [].map.call(arguments, function(arg) { - if (arg) switch (typeof arg) { - case "function": - return arg.toString(); - case "object": - if (/Error$/.test(arg.name)) return arg.toString(); - if (typeof arg.constructor == "function") arg.constructor.toString(); - } - return arg; - })); + return console.log.apply(console, [].map.call(arguments, safe_log)); } } }, { timeout: 5000 }); diff --git a/test/ufuzz.js b/test/ufuzz.js index c6a94f2d..12c62651 100644 --- a/test/ufuzz.js +++ b/test/ufuzz.js @@ -513,6 +513,7 @@ function createStatement(recurmax, canThrow, canBreak, canContinue, cannotReturn // we have to do go through some trouble here to prevent leaking it var nameLenBefore = VAR_NAMES.length; var catchName = createVarName(MANDATORY); + if (catchName == 'this') catchName = 'a'; var freshCatchName = VAR_NAMES.length !== nameLenBefore; s += ' catch (' + catchName + ') { ' + createStatements(3, recurmax, canThrow, canBreak, canContinue, cannotReturn, stmtDepth) + ' }'; if (freshCatchName) VAR_NAMES.splice(nameLenBefore, 1); // remove catch name