diff --git a/packages/tracing/test/utils.test.ts b/packages/tracing/test/utils.test.ts index eae5213758ea..3bd3e9f5f35f 100644 --- a/packages/tracing/test/utils.test.ts +++ b/packages/tracing/test/utils.test.ts @@ -60,6 +60,9 @@ describe('extractTraceparentData', () => { }); test('invalid', () => { + // empty string + expect(extractTraceparentData('')).toBeUndefined(); + // trace id wrong length expect(extractTraceparentData('a-bbbbbbbbbbbbbbbb-1')).toBeUndefined(); diff --git a/packages/utils/src/tracing.ts b/packages/utils/src/tracing.ts index aef92cf5f0ca..cef6e334f7e7 100644 --- a/packages/utils/src/tracing.ts +++ b/packages/utils/src/tracing.ts @@ -17,18 +17,22 @@ export const TRACEPARENT_REGEXP = new RegExp( */ export function extractTraceparentData(traceparent: string): TraceparentData | undefined { const matches = traceparent.match(TRACEPARENT_REGEXP); - if (matches) { - let parentSampled: boolean | undefined; - if (matches[3] === '1') { - parentSampled = true; - } else if (matches[3] === '0') { - parentSampled = false; - } - return { - traceId: matches[1], - parentSampled, - parentSpanId: matches[2], - }; + + if (!traceparent || !matches) { + // empty string or no matches is invalid traceparent data + return undefined; + } + + let parentSampled: boolean | undefined; + if (matches[3] === '1') { + parentSampled = true; + } else if (matches[3] === '0') { + parentSampled = false; } - return undefined; + + return { + traceId: matches[1], + parentSampled, + parentSpanId: matches[2], + }; }