From 089d6886178864b56fdd5dc2bcfc8f207aa4326c Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Mon, 5 Oct 2015 16:29:27 -0500 Subject: [PATCH] util: fix check for Array constructor In the event an Array is created in a Debug context, the constructor will be Array, but !== Array. This adds a check constructor.name === 'Array' to handle edge cases like that. PR-URL: https://github.com/nodejs/node/pull/3119 Reviewed-By: Ben Noordhuis --- lib/util.js | 5 ++++- test/parallel/test-util-inspect.js | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/util.js b/lib/util.js index 7b2bfd2b3c0d56..401a0ed3c7f7d5 100644 --- a/lib/util.js +++ b/lib/util.js @@ -292,7 +292,10 @@ function formatValue(ctx, value, recurseTimes) { var base = '', empty = false, braces, formatter; if (Array.isArray(value)) { - if (constructor === Array) + // We can't use `constructor === Array` because this could + // have come from a Debug context. + // Otherwise, an Array will print "Array [...]". + if (constructor && constructor.name === 'Array') constructor = null; braces = ['[', ']']; empty = value.length === 0; diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index 58a4c8a2f2b142..aa6c7644913ad7 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -23,6 +23,19 @@ assert.equal(util.inspect(a), '[ \'foo\', , \'baz\' ]'); assert.equal(util.inspect(a, true), '[ \'foo\', , \'baz\', [length]: 3 ]'); assert.equal(util.inspect(new Array(5)), '[ , , , , ]'); +// test for Array constructor in different context +const Debug = require('vm').runInDebugContext('Debug'); +var map = new Map(); +map.set(1, 2); +var mirror = Debug.MakeMirror(map.entries(), true); +var vals = mirror.preview(); +var valsOutput = []; +for (let o of vals) { + valsOutput.push(o); +} + +assert.strictEqual(util.inspect(valsOutput), '[ [ 1, 2 ] ]'); + // test for property descriptors var getter = Object.create(null, { a: {