More bulletproof `util.inspect()` function.
authorNathan Rajlich <nathan@tootallnate.net>
Wed, 26 Oct 2011 06:56:07 +0000 (23:56 -0700)
committerkoichik <koichik@improvement.jp>
Wed, 26 Oct 2011 19:58:34 +0000 (04:58 +0900)
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

index 07e2e3b..7fd432a 100644 (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');
     }