Skip to content

Commit 474a0a0

Browse files
authored
fix(browser): Parse Chrome stack frames without full paths (#5519)
Update chromium parser to use extended lazy lookups to account for frames that don't have full path names. Validated through a unit test and by analyzing an error on the Sentry frontend.
1 parent f0ab0e0 commit 474a0a0

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

packages/browser/src/stack-parsers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function createFrame(filename: string, func: string, lineno?: number, colno?: nu
3131

3232
// Chromium based browsers: Chrome, Brave, new Opera, new Edge
3333
const chromeRegex =
34-
/^\s*at (?:(.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
34+
/^\s*at (?:(.*\).*?|.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
3535
const chromeEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
3636

3737
const chrome: StackLineParserFn = line => {

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

+67
Original file line numberDiff line numberDiff line change
@@ -430,4 +430,71 @@ describe('Tracekit - Chrome Tests', () => {
430430
},
431431
});
432432
});
433+
434+
it('should parse exceptions with frames without full paths', () => {
435+
const EXCEPTION = {
436+
message: 'aha',
437+
name: 'Error',
438+
stack: `Error
439+
at Client.requestPromise (api.tsx:554:1)
440+
at doDiscoverQuery (genericDiscoverQuery.tsx?33f8:328:1)
441+
at _GenericDiscoverQuery.eval [as fetchData] (genericDiscoverQuery.tsx?33f8:256:1)
442+
at _GenericDiscoverQuery.componentDidMount (genericDiscoverQuery.tsx?33f8:152:1)
443+
at commitLifeCycles (react-dom.development.js?f8c1:20663:1)
444+
at commitLayoutEffects (react-dom.development.js?f8c1:23426:1)`,
445+
};
446+
447+
const ex = exceptionFromError(parser, EXCEPTION);
448+
449+
expect(ex).toEqual({
450+
value: 'aha',
451+
type: 'Error',
452+
stacktrace: {
453+
frames: [
454+
{
455+
filename: 'react-dom.development.js?f8c1',
456+
function: 'commitLayoutEffects',
457+
in_app: true,
458+
lineno: 23426,
459+
colno: 1,
460+
},
461+
{
462+
filename: 'react-dom.development.js?f8c1',
463+
function: 'commitLifeCycles',
464+
in_app: true,
465+
lineno: 20663,
466+
colno: 1,
467+
},
468+
{
469+
filename: 'genericDiscoverQuery.tsx?33f8',
470+
function: '_GenericDiscoverQuery.componentDidMount',
471+
in_app: true,
472+
lineno: 152,
473+
colno: 1,
474+
},
475+
{
476+
filename: 'genericDiscoverQuery.tsx?33f8',
477+
function: '_GenericDiscoverQuery.eval [as fetchData]',
478+
in_app: true,
479+
lineno: 256,
480+
colno: 1,
481+
},
482+
{
483+
filename: 'genericDiscoverQuery.tsx?33f8',
484+
function: 'doDiscoverQuery',
485+
in_app: true,
486+
lineno: 328,
487+
colno: 1,
488+
},
489+
{
490+
filename: 'api.tsx',
491+
function: 'Client.requestPromise',
492+
in_app: true,
493+
lineno: 554,
494+
colno: 1,
495+
},
496+
],
497+
},
498+
});
499+
});
433500
});

0 commit comments

Comments
 (0)