Skip to content

Commit f8d2245

Browse files
committed
Fix baggage parsing for invalid percent-encoded members
1 parent a5cd87f commit f8d2245

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

api/all/src/main/java/io/opentelemetry/api/baggage/propagation/Parser.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,13 @@ private void putBaggage(
140140
if (entriesAdded >= maxEntries) {
141141
return;
142142
}
143-
String decodedValue = decodeValue(value);
144-
metadataValue = decodeValue(metadataValue);
143+
String decodedValue;
144+
try {
145+
decodedValue = decodeValue(value);
146+
metadataValue = decodeValue(metadataValue);
147+
} catch (IllegalArgumentException e) {
148+
return;
149+
}
145150
BaggageEntryMetadata baggageEntryMetadata =
146151
metadataValue != null
147152
? BaggageEntryMetadata.create(metadataValue)

api/all/src/test/java/io/opentelemetry/api/baggage/propagation/W3CBaggagePropagatorTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,21 @@ void extract_member_someInvalid() {
439439
assertThat(Baggage.fromContext(result)).isEqualTo(expectedBaggage);
440440
}
441441

442+
@Test
443+
void extract_member_invalidPercentEncoding_preservesValidMembers() {
444+
W3CBaggagePropagator propagator = W3CBaggagePropagator.getInstance();
445+
446+
Context result =
447+
propagator.extract(
448+
Context.root(),
449+
ImmutableMap.of("baggage", "key1=value1,bad=va%lue,key2=value2"),
450+
getter);
451+
452+
Baggage expectedBaggage = Baggage.builder().put("key1", "value1").put("key2", "value2").build();
453+
454+
assertThat(Baggage.fromContext(result)).isEqualTo(expectedBaggage);
455+
}
456+
442457
@Test
443458
void extract_nullContext() {
444459
assertThat(W3CBaggagePropagator.getInstance().extract(null, Collections.emptyMap(), getter))

0 commit comments

Comments
 (0)