Skip to content

Commit 14849db

Browse files
timfishmydea
andauthored
fix(browser): DOMException SecurityError stacktrace parsing bug (#7821)
Co-authored-by: Francesco Novy <[email protected]>
1 parent c1055f5 commit 14849db

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

packages/browser/test/unit/tracekit/misc.test.ts

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,107 @@ describe('Tracekit - Misc Tests', () => {
2626
},
2727
});
2828
});
29+
30+
it('should parse SecurityError', () => {
31+
const SECURITY_ERROR = {
32+
name: 'SecurityError',
33+
message: 'Blocked a frame with origin "https://SENTRY_URL.sentry.io" from accessing a cross-origin frame.',
34+
stack:
35+
'SecurityError: Blocked a frame with origin "https://SENTRY_URL.sentry.io" from accessing a cross-origin frame.\n' +
36+
' at Error: Blocked a frame with origin "(https://SENTRY_URL.sentry.io" from accessing a cross-origin frame.)\n' +
37+
' at castFn(../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js:368:76)\n' +
38+
' at castFn(../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js:409:17)\n' +
39+
' at Replayer.applyEventsSynchronously(../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js:325:13)\n' +
40+
' at <object>.actions.play(../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/machine.js:132:17)\n' +
41+
' at <anonymous>(../node_modules/@sentry-internal/rrweb/es/rrweb/ext/@xstate/fsm/es/index.js:15:2595)\n' +
42+
' at Array.forEach(<anonymous>)\n' +
43+
' at l(../node_modules/@sentry-internal/rrweb/es/rrweb/ext/@xstate/fsm/es/index.js:15:2551)\n' +
44+
' at c.send(../node_modules/@sentry-internal/rrweb/es/rrweb/ext/@xstate/fsm/es/index.js:15:2741)\n' +
45+
' at Replayer.play(../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js:220:26)\n' +
46+
' at Replayer.pause(../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js:235:18)\n' +
47+
' at playTimer.current(./app/components/replays/replayContext.tsx:397:62)\n' +
48+
' at sentryWrapped(../node_modules/@sentry/browser/esm/helpers.js:90:17)',
49+
};
50+
const ex = exceptionFromError(parser, SECURITY_ERROR);
51+
52+
expect(ex).toEqual({
53+
type: 'SecurityError',
54+
value: 'Blocked a frame with origin "https://SENTRY_URL.sentry.io" from accessing a cross-origin frame.',
55+
stacktrace: {
56+
frames: [
57+
{
58+
filename: './app/components/replays/replayContext.tsx',
59+
function: 'playTimer.current',
60+
in_app: true,
61+
lineno: 397,
62+
colno: 62,
63+
},
64+
{
65+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js',
66+
function: 'Replayer.pause',
67+
in_app: true,
68+
lineno: 235,
69+
colno: 18,
70+
},
71+
{
72+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js',
73+
function: 'Replayer.play',
74+
in_app: true,
75+
lineno: 220,
76+
colno: 26,
77+
},
78+
{
79+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/ext/@xstate/fsm/es/index.js',
80+
function: 'c.send',
81+
in_app: true,
82+
lineno: 15,
83+
colno: 2741,
84+
},
85+
{
86+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/ext/@xstate/fsm/es/index.js',
87+
function: 'l',
88+
in_app: true,
89+
lineno: 15,
90+
colno: 2551,
91+
},
92+
{ filename: '<anonymous>', function: 'Array.forEach', in_app: true },
93+
{
94+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/ext/@xstate/fsm/es/index.js',
95+
function: '<anonymous>',
96+
in_app: true,
97+
lineno: 15,
98+
colno: 2595,
99+
},
100+
{
101+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/machine.js',
102+
function: '<object>.actions.play',
103+
in_app: true,
104+
lineno: 132,
105+
colno: 17,
106+
},
107+
{
108+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js',
109+
function: 'Replayer.applyEventsSynchronously',
110+
in_app: true,
111+
lineno: 325,
112+
colno: 13,
113+
},
114+
{
115+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js',
116+
function: 'castFn',
117+
in_app: true,
118+
lineno: 409,
119+
colno: 17,
120+
},
121+
{
122+
filename: '../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/replay/index.js',
123+
function: 'castFn',
124+
in_app: true,
125+
lineno: 368,
126+
colno: 76,
127+
},
128+
],
129+
},
130+
});
131+
});
29132
});

packages/utils/src/stacktrace.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ export function createStackParser(...parsers: StackLineParser[]): StackParser {
3535
// Remove webpack (error: *) wrappers
3636
const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;
3737

38+
// https://github.com/getsentry/sentry-javascript/issues/7813
39+
// Skip Error: lines
40+
if (cleanedLine.match(/\S*Error: /)) {
41+
continue;
42+
}
43+
3844
for (const parser of sortedParsers) {
3945
const frame = parser(cleanedLine);
4046

0 commit comments

Comments
 (0)