From 44818c1d5c826096b5dc93e3bc67e8868572d3af Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 2 Aug 2023 16:52:15 +0200 Subject: [PATCH 1/2] fix(utils): Remove `addContextToFrame` pre_context and line overlap if frame lineno is out of bounds --- packages/utils/src/misc.ts | 2 +- packages/utils/test/misc.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/utils/src/misc.ts b/packages/utils/src/misc.ts index 640c526db7b2..a474c8e157e4 100644 --- a/packages/utils/src/misc.ts +++ b/packages/utils/src/misc.ts @@ -153,7 +153,7 @@ export function addContextToFrame(lines: string[], frame: StackFrame, linesOfCon } const maxLines = lines.length; - const sourceLine = Math.max(Math.min(maxLines, frame.lineno - 1), 0); + const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0); frame.pre_context = lines .slice(Math.max(0, sourceLine - linesOfContext), sourceLine) diff --git a/packages/utils/test/misc.test.ts b/packages/utils/test/misc.test.ts index 77c6441e31a1..70d670600cba 100644 --- a/packages/utils/test/misc.test.ts +++ b/packages/utils/test/misc.test.ts @@ -181,7 +181,7 @@ describe('addContextToFrame', () => { lineno: 999, }; addContextToFrame(lines, frame); - expect(frame.pre_context).toEqual(['10: j', '11: k', '12: l', '13: m', '14: n']); + expect(frame.pre_context).toEqual(['9: i', '10: j', '11: k', '12: l', '13: m']); expect(frame.context_line).toEqual('14: n'); expect(frame.post_context).toEqual([]); }); From f3686604ee71c455af8cf5fc002bda567358e433 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 2 Aug 2023 17:03:46 +0200 Subject: [PATCH 2/2] add truncation test --- packages/utils/test/misc.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/utils/test/misc.test.ts b/packages/utils/test/misc.test.ts index 70d670600cba..aaac0d46c0b0 100644 --- a/packages/utils/test/misc.test.ts +++ b/packages/utils/test/misc.test.ts @@ -185,6 +185,16 @@ describe('addContextToFrame', () => { expect(frame.context_line).toEqual('14: n'); expect(frame.post_context).toEqual([]); }); + + test('truncate line if too long', () => { + const frame: StackFrame = { + lineno: 1, + }; + addContextToFrame(['1234567890'.repeat(100)], frame); + expect(frame.pre_context).toEqual([]); + expect(frame.context_line).toEqual(`${'1234567890'.repeat(14)} {snip}`); + expect(frame.post_context).toEqual([]); + }); }); describe('addExceptionMechanism', () => {