Skip to content

Commit a421318

Browse files
fix(parseKeyPairsIntoRecord): allow equals in baggage value #3974 (#3975)
Co-authored-by: Marc Pichler <[email protected]>
1 parent 3732256 commit a421318

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/
3636
* fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001
3737
* fix(sdk-metrics): preserve startTime for cumulative ExponentialHistograms [#3934](https://github.com/open-telemetry/opentelemetry-js/pull/3934/) @aabmass
3838
* fix(sdk-trace-web): add secureConnectionStart to https only [#3879](https://github.com/open-telemetry/opentelemetry-js/pull/3879) @Abinet18
39+
* fix(core): add baggage support for values containing an equals sign [#3975](https://github.com/open-telemetry/opentelemetry-js/pull/3975) @krosenk729
3940

4041
### :house: (Internal)
4142

packages/opentelemetry-core/src/baggage/utils.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,14 @@ export function parsePairKeyValue(
6161
if (valueProps.length <= 0) return;
6262
const keyPairPart = valueProps.shift();
6363
if (!keyPairPart) return;
64-
const keyPair = keyPairPart.split(BAGGAGE_KEY_PAIR_SEPARATOR);
65-
if (keyPair.length !== 2) return;
66-
const key = decodeURIComponent(keyPair[0].trim());
67-
const value = decodeURIComponent(keyPair[1].trim());
64+
const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR);
65+
if (separatorIndex <= 0) return;
66+
const key = decodeURIComponent(
67+
keyPairPart.substring(0, separatorIndex).trim()
68+
);
69+
const value = decodeURIComponent(
70+
keyPairPart.substring(separatorIndex + 1).trim()
71+
);
6872
let metadata;
6973
if (valueProps.length > 0) {
7074
metadata = baggageEntryMetadataFromString(

packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts

+4-8
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ describe('W3CBaggagePropagator', () => {
181181

182182
describe('.extract()', () => {
183183
const baggageValue =
184-
'key1=d4cda95b,key3=c88815a7, keyn = valn, keym =valm';
184+
'key1=d4cda95b==,key3=c88815a7, keyn = valn, keym =valm';
185185
const expected = propagation.createBaggage({
186-
key1: { value: 'd4cda95b' },
186+
key1: { value: 'd4cda95b==' },
187187
key3: { value: 'c88815a7' },
188188
keyn: { value: 'valn' },
189189
keym: { value: 'valm' },
@@ -217,7 +217,7 @@ describe('W3CBaggagePropagator', () => {
217217

218218
it('should extract context of a sampled span when the headerValue comes as array with multiple items', () => {
219219
carrier[BAGGAGE_HEADER] = [
220-
'key1=d4cda95b,key3=c88815a7, keyn = valn',
220+
'key1=d4cda95b==,key3=c88815a7, keyn = valn',
221221
'keym =valm',
222222
];
223223
const extractedBaggage = propagation.getBaggage(
@@ -282,10 +282,6 @@ describe('W3CBaggagePropagator', () => {
282282
header: '289371298nekjh2939299283jbk2b',
283283
baggage: undefined,
284284
},
285-
invalidDoubleEqual: {
286-
header: 'key1==value;key2=value2',
287-
baggage: undefined,
288-
},
289285
invalidWrongKeyValueFormat: {
290286
header: 'key1:value;key2=value2',
291287
baggage: undefined,
@@ -295,7 +291,7 @@ describe('W3CBaggagePropagator', () => {
295291
baggage: undefined,
296292
},
297293
mixInvalidAndValidKeys: {
298-
header: 'key1==value,key2=value2',
294+
header: 'key1:value,key2=value2',
299295
baggage: propagation.createBaggage({
300296
key2: {
301297
value: 'value2',

0 commit comments

Comments
 (0)