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..aaac0d46c0b0 100644 --- a/packages/utils/test/misc.test.ts +++ b/packages/utils/test/misc.test.ts @@ -181,10 +181,20 @@ 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([]); }); + + 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', () => {