Skip to content

Commit 87ef1b2

Browse files
aduh95danielleadams
authored andcommitted
util: fix inspecting error with a throwing getter for cause
PR-URL: #47163 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent 3e74a74 commit 87ef1b2

3 files changed

Lines changed: 25 additions & 2 deletions

File tree

‎lib/internal/util/inspect.js‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,9 +1244,16 @@ function getStackString(error) {
12441244
functiongetStackFrames(ctx,err,stack){
12451245
constframes=StringPrototypeSplit(stack,'\n');
12461246

1247+
letcause;
1248+
try{
1249+
({ cause }=err);
1250+
}catch{
1251+
// If 'cause' is a getter that throws, ignore it.
1252+
}
1253+
12471254
// Remove stack frames identical to frames in cause.
1248-
if(err.cause&&isError(err.cause)){
1249-
constcauseStack=getStackString(err.cause);
1255+
if(cause!=null&&isError(cause)){
1256+
constcauseStack=getStackString(cause);
12501257
constcauseStackStart=StringPrototypeIndexOf(causeStack,'\n at');
12511258
if(causeStackStart!==-1){
12521259
constcauseFrames=StringPrototypeSplit(StringPrototypeSlice(causeStack,causeStackStart+1),'\n');

‎test/message/util-inspect-error-cause.js‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,9 @@ process.nextTick(() => {
4646
console.log(inspect(cause3));
4747
console.log(inspect(error2));
4848
});
49+
50+
{
51+
consterror=newError('cause that throws');
52+
Reflect.defineProperty(error,'cause',{get(){thrownewError();}});
53+
console.log(inspect(error));
54+
}

‎test/message/util-inspect-error-cause.out‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ Error: undefined cause
3333
at * {
3434
[cause]: undefined
3535
}
36+
Error: cause that throws
37+
at *
38+
at *
39+
at *
40+
at *
41+
at *
42+
at *
43+
at * {
44+
[cause]: [Getter]
45+
}
3646
RangeError: New Stack Frames
3747
at *
3848
*[90m at *[39m {

0 commit comments

Comments
 (0)