summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/internal/util/inspect.js15
-rw-r--r--test/parallel/test-util-primordial-monkeypatching.js11
2 files changed, 19 insertions, 7 deletions
diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js
index 0f81ab5d02..94d6ef8706 100644
--- a/lib/internal/util/inspect.js
+++ b/lib/internal/util/inspect.js
@@ -63,6 +63,11 @@ const {
isBigUint64Array
} = require('internal/util/types');
+const assert = require('internal/assert');
+
+// Avoid monkey-patched built-ins.
+const { Object } = primordials;
+
const ReflectApply = Reflect.apply;
// This function is borrowed from the function with the same name on V8 Extras'
@@ -383,13 +388,9 @@ function getKeys(value, showHidden) {
try {
keys = Object.keys(value);
} catch (err) {
- if (isNativeError(err) &&
- err.name === 'ReferenceError' &&
- isModuleNamespaceObject(value)) {
- keys = Object.getOwnPropertyNames(value);
- } else {
- throw err;
- }
+ assert(isNativeError(err) && err.name === 'ReferenceError' &&
+ isModuleNamespaceObject(value));
+ keys = Object.getOwnPropertyNames(value);
}
if (symbols.length !== 0) {
keys.push(...symbols.filter((key) => propertyIsEnumerable(value, key)));
diff --git a/test/parallel/test-util-primordial-monkeypatching.js b/test/parallel/test-util-primordial-monkeypatching.js
new file mode 100644
index 0000000000..bf282a1212
--- /dev/null
+++ b/test/parallel/test-util-primordial-monkeypatching.js
@@ -0,0 +1,11 @@
+'use strict';
+
+// Monkeypatch Object.keys() so that it throws an unexpected error. This tests
+// that `util.inspect()` is unaffected by monkey-patching `Object`.
+
+require('../common');
+const assert = require('assert');
+const util = require('util');
+
+Object.keys = () => { throw new Error('fhqwhgads'); };
+assert.strictEqual(util.inspect({}), '{}');