Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
util: safely inspect getter errors whose message throws
  • Loading branch information
yvele committed Nov 25, 2025
commit 6f5e83d9636ad66872b1d25504a1c2d18574681a
9 changes: 8 additions & 1 deletion lib/internal/util/inspect.js
Original file line number Diff line number Diff line change
Expand Up @@ -2557,7 +2557,14 @@ function formatProperty(ctx, value, recurseTimes, key, type, desc,
}
ctx.indentationLvl -= 2;
} catch (err) {
const message = `<Inspection threw (${err.message})>`;
let messageSuffix;
try {
// Error message itself may be a getter
messageSuffix = ` (${err.message})`;
} catch {
messageSuffix = '';
}
const message = `<Inspection threw${messageSuffix}>`;
Comment thread
yvele marked this conversation as resolved.
Resolved
str = `${s(`[${label}:`, sp)} ${message}${s(']', sp)}`;
}
} else {
Expand Down
17 changes: 17 additions & 0 deletions test/parallel/test-util-inspect.js
Original file line number Diff line number Diff line change
Expand Up @@ -2551,6 +2551,23 @@ assert.strictEqual(
"'foobar', { x: 1 } },\n inc: [Getter: NaN]\n}");
}

// Test for property getter throwing an error with a bad message.
{
const error = {
// The message itself is a getter that throws
get message() { throw new Error('Oops'); }
Comment thread
yvele marked this conversation as resolved.
Resolved
};

const thrower = {
get foo() { throw error; }
};

assert.strictEqual(
inspect(thrower, { getters: true }),
'{ foo: [Getter: <Inspection threw>] }'
);
}

// Check compact number mode.
{
let obj = {
Expand Down