fix(parseKeyPairsIntoRecord): allow equals in baggage value #3974 (#3975)

Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
This commit is contained in:
Katherine 2023-08-07 12:11:46 -04:00 committed by GitHub
parent 3732256f02
commit a4213183b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 12 deletions

View File

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

View File

@ -61,10 +61,14 @@ export function parsePairKeyValue(
if (valueProps.length <= 0) return;
const keyPairPart = valueProps.shift();
if (!keyPairPart) return;
const keyPair = keyPairPart.split(BAGGAGE_KEY_PAIR_SEPARATOR);
if (keyPair.length !== 2) return;
const key = decodeURIComponent(keyPair[0].trim());
const value = decodeURIComponent(keyPair[1].trim());
const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR);
if (separatorIndex <= 0) return;
const key = decodeURIComponent(
keyPairPart.substring(0, separatorIndex).trim()
);
const value = decodeURIComponent(
keyPairPart.substring(separatorIndex + 1).trim()
);
let metadata;
if (valueProps.length > 0) {
metadata = baggageEntryMetadataFromString(

View File

@ -181,9 +181,9 @@ describe('W3CBaggagePropagator', () => {
describe('.extract()', () => {
const baggageValue =
'key1=d4cda95b,key3=c88815a7, keyn = valn, keym =valm';
'key1=d4cda95b==,key3=c88815a7, keyn = valn, keym =valm';
const expected = propagation.createBaggage({
key1: { value: 'd4cda95b' },
key1: { value: 'd4cda95b==' },
key3: { value: 'c88815a7' },
keyn: { value: 'valn' },
keym: { value: 'valm' },
@ -217,7 +217,7 @@ describe('W3CBaggagePropagator', () => {
it('should extract context of a sampled span when the headerValue comes as array with multiple items', () => {
carrier[BAGGAGE_HEADER] = [
'key1=d4cda95b,key3=c88815a7, keyn = valn',
'key1=d4cda95b==,key3=c88815a7, keyn = valn',
'keym =valm',
];
const extractedBaggage = propagation.getBaggage(
@ -282,10 +282,6 @@ describe('W3CBaggagePropagator', () => {
header: '289371298nekjh2939299283jbk2b',
baggage: undefined,
},
invalidDoubleEqual: {
header: 'key1==value;key2=value2',
baggage: undefined,
},
invalidWrongKeyValueFormat: {
header: 'key1:value;key2=value2',
baggage: undefined,
@ -295,7 +291,7 @@ describe('W3CBaggagePropagator', () => {
baggage: undefined,
},
mixInvalidAndValidKeys: {
header: 'key1==value,key2=value2',
header: 'key1:value,key2=value2',
baggage: propagation.createBaggage({
key2: {
value: 'value2',