From 7296bcb3cb937ee6b3d607f8cfb84db21ebb069d Mon Sep 17 00:00:00 2001
From: Anna Henningsen <anna@addaleax.net>
Date: Thu, 11 Mar 2021 14:20:44 +0100
Subject: [PATCH] util: inspect __proto__ key as written in object literal
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Since util.inspect() gives object-literal-like output, handle the
special `__proto__` key in the way that it would be handled in object
literals.

PR-URL: https://github.com/nodejs/node/pull/37713
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
---
 lib/internal/util/inspect.js       | 2 ++
 test/parallel/test-util-inspect.js | 7 +++++++
 2 files changed, 9 insertions(+)

diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js
index f658103b954fbb..fed88e963a178c 100644
--- a/lib/internal/util/inspect.js
+++ b/lib/internal/util/inspect.js
@@ -1718,6 +1718,8 @@ function formatProperty(ctx, value, recurseTimes, key, type, desc,
       strEscapeSequencesReplacer, escapeFn
     );
     name = `[${ctx.stylize(tmp, 'symbol')}]`;
+  } else if (key === '__proto__') {
+    name = "['__proto__']";
   } else if (desc.enumerable === false) {
     const tmp = StringPrototypeReplace(key,
                                        strEscapeSequencesReplacer, escapeFn);
diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js
index 8314b64c5ac345..f70090f48939d7 100644
--- a/test/parallel/test-util-inspect.js
+++ b/test/parallel/test-util-inspect.js
@@ -3095,3 +3095,10 @@ assert.strictEqual(
     ']'
   );
 }
+
+{
+  assert.strictEqual(
+    util.inspect({ ['__proto__']: { a: 1 } }),
+    "{ ['__proto__']: { a: 1 } }"
+  );
+}