From 1e643a8221f9a7b4a5fe93b04ad3fc3cfa2ba50e Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 27 Mar 2020 09:17:17 -0400 Subject: [PATCH] fix: add type checking in propagators (#904) --- src/JaegerHttpTracePropagator.ts | 3 ++- test/JaegerHttpTracePropagator.test.ts | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/JaegerHttpTracePropagator.ts b/src/JaegerHttpTracePropagator.ts index 13901fc8a1e..a5ab840dc7f 100644 --- a/src/JaegerHttpTracePropagator.ts +++ b/src/JaegerHttpTracePropagator.ts @@ -71,11 +71,12 @@ export class JaegerHttpTracePropagator implements HttpTextPropagator { extract(context: Context, carrier: unknown, getter: GetterFunction): Context { const uberTraceIdHeader = getter(carrier, this._jaegerTraceHeader); - if (!uberTraceIdHeader) return context; const uberTraceId = Array.isArray(uberTraceIdHeader) ? uberTraceIdHeader[0] : uberTraceIdHeader; + if (typeof uberTraceId !== 'string') return context; + const spanContext = deserializeSpanContext(uberTraceId); if (!spanContext) return context; diff --git a/test/JaegerHttpTracePropagator.test.ts b/test/JaegerHttpTracePropagator.test.ts index d2fa0b95e89..4013e4e8cd7 100644 --- a/test/JaegerHttpTracePropagator.test.ts +++ b/test/JaegerHttpTracePropagator.test.ts @@ -185,4 +185,26 @@ describe('JaegerHttpTracePropagator', () => { ); }); }); + + it('should fail gracefully on bad responses from getter', () => { + const ctx1 = jaegerHttpTracePropagator.extract( + Context.ROOT_CONTEXT, + carrier, + (c, k) => 1 // not a number + ); + const ctx2 = jaegerHttpTracePropagator.extract( + Context.ROOT_CONTEXT, + carrier, + (c, k) => [] // empty array + ); + const ctx3 = jaegerHttpTracePropagator.extract( + Context.ROOT_CONTEXT, + carrier, + (c, k) => undefined // missing value + ); + + assert.ok(ctx1 === Context.ROOT_CONTEXT); + assert.ok(ctx2 === Context.ROOT_CONTEXT); + assert.ok(ctx3 === Context.ROOT_CONTEXT); + }); });