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.
pull/22966/head
Nathan Rajlich 2011-10-25 23:56:07 -07:00 committed by koichik
parent d4379fcee3
commit ebefe77bc0
1 changed files with 5 additions and 5 deletions

View File

@ -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');
}