util: make util.inspect() work when "hasOwnProperty" is overwritten
authorNathan Rajlich <nathan@tootallnate.net>
Sat, 8 Sep 2012 22:09:59 +0000 (15:09 -0700)
committerNathan Rajlich <nathan@tootallnate.net>
Sat, 8 Sep 2012 22:09:59 +0000 (15:09 -0700)
lib/util.js
test/simple/test-util-inspect.js

index 53775e7..d9a5c2b 100644 (file)
@@ -318,7 +318,7 @@ function formatError(value) {
 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
   var output = [];
   for (var i = 0, l = value.length; i < l; ++i) {
-    if (Object.prototype.hasOwnProperty.call(value, String(i))) {
+    if (hasOwnProperty(value, String(i))) {
       output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
           String(i), true));
     } else {
@@ -349,7 +349,7 @@ function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
       str = ctx.stylize('[Setter]', 'special');
     }
   }
-  if (!visibleKeys.hasOwnProperty(key)) {
+  if (!hasOwnProperty(visibleKeys, key)) {
     name = '[' + key + ']';
   }
   if (!str) {
@@ -556,3 +556,7 @@ exports._extend = function(origin, add) {
   }
   return origin;
 };
+
+function hasOwnProperty(obj, prop) {
+  return Object.prototype.hasOwnProperty.call(obj, prop);
+}
index 5b8fed9..b6f5bfa 100644 (file)
@@ -107,3 +107,10 @@ assert.doesNotThrow(function() {
 // GH-2225
 var x = { inspect: util.inspect };
 assert.ok(util.inspect(x).indexOf('inspect') != -1);
+
+// an object with "hasOwnProperty" overwritten should not throw
+assert.doesNotThrow(function() {
+  util.inspect({
+    hasOwnProperty: null
+  });
+});