Browse Source

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.
v0.7.4-release
Nathan Rajlich 13 years ago
committed by koichik
parent
commit
ebefe77bc0
  1. 10
      lib/util.js

10
lib/util.js

@ -180,10 +180,10 @@ function formatValue(ctx, value, recurseTimes) {
return ctx.stylize('[Function' + name + ']', 'special'); return ctx.stylize('[Function' + name + ']', 'special');
} }
if (isRegExp(value)) { if (isRegExp(value)) {
return ctx.stylize('' + value, 'regexp'); return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
} }
if (isDate(value)) { if (isDate(value)) {
return ctx.stylize(value.toUTCString(), 'date'); return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
} }
if (isError(value)) { if (isError(value)) {
return formatError(value); return formatError(value);
@ -206,12 +206,12 @@ function formatValue(ctx, value, recurseTimes) {
// Make RegExps say that they are RegExps // Make RegExps say that they are RegExps
if (isRegExp(value)) { if (isRegExp(value)) {
base = ' ' + value; base = ' ' + RegExp.prototype.toString.call(value);
} }
// Make dates with properties first say the date // Make dates with properties first say the date
if (isDate(value)) { if (isDate(value)) {
base = ' ' + value.toUTCString(); base = ' ' + Date.prototype.toUTCString.call(value);
} }
// Make error with message first say the error // Make error with message first say the error
@ -225,7 +225,7 @@ function formatValue(ctx, value, recurseTimes) {
if (recurseTimes < 0) { if (recurseTimes < 0) {
if (isRegExp(value)) { if (isRegExp(value)) {
return ctx.stylize('' + value, 'regexp'); return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
} else { } else {
return ctx.stylize('[Object]', 'special'); return ctx.stylize('[Object]', 'special');
} }

Loading…
Cancel
Save