From ebefe77bc09df7cdb844d837c9ba3dcbbb24bf28 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 25 Oct 2011 23:56:07 -0700 Subject: [PATCH] More bulletproof `util.inspect()` function. Use the *real* versions of the Date and RegExp functions, from the prototype. This defends against code like: var d = new Date() d.toUTCString = null util.inspect(d) // TypeError: toUTCString is not a function Fixes #1944. --- lib/util.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/util.js b/lib/util.js index 07e2e3ba990..7fd432a4af8 100644 --- a/lib/util.js +++ b/lib/util.js @@ -180,10 +180,10 @@ function formatValue(ctx, value, recurseTimes) { return ctx.stylize('[Function' + name + ']', 'special'); } if (isRegExp(value)) { - return ctx.stylize('' + value, 'regexp'); + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } if (isDate(value)) { - return ctx.stylize(value.toUTCString(), 'date'); + return ctx.stylize(Date.prototype.toUTCString.call(value), 'date'); } if (isError(value)) { return formatError(value); @@ -206,12 +206,12 @@ function formatValue(ctx, value, recurseTimes) { // Make RegExps say that they are RegExps if (isRegExp(value)) { - base = ' ' + value; + base = ' ' + RegExp.prototype.toString.call(value); } // Make dates with properties first say the date if (isDate(value)) { - base = ' ' + value.toUTCString(); + base = ' ' + Date.prototype.toUTCString.call(value); } // Make error with message first say the error @@ -225,7 +225,7 @@ function formatValue(ctx, value, recurseTimes) { if (recurseTimes < 0) { if (isRegExp(value)) { - return ctx.stylize('' + value, 'regexp'); + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } else { return ctx.stylize('[Object]', 'special'); }