Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import io.opentelemetry.api.baggage.BaggageBuilder;
import io.opentelemetry.api.baggage.BaggageEntryMetadata;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nullable;

/**
Expand All @@ -20,6 +22,8 @@
*/
class Parser {

private static final Logger LOGGER = Logger.getLogger(Parser.class.getName());

private enum State {
KEY,
VALUE,
Expand Down Expand Up @@ -140,8 +144,14 @@ private void putBaggage(
if (entriesAdded >= maxEntries) {
return;
}
String decodedValue = decodeValue(value);
metadataValue = decodeValue(metadataValue);
String decodedValue;
try {
decodedValue = decodeValue(value);
metadataValue = decodeValue(metadataValue);
} catch (IllegalArgumentException e) {
LOGGER.log(Level.WARNING, "Skipping invalid baggage member", e);
return;
Comment thread
psx95 marked this conversation as resolved.
}
BaggageEntryMetadata baggageEntryMetadata =
metadataValue != null
? BaggageEntryMetadata.create(metadataValue)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import io.opentelemetry.api.baggage.BaggageEntryMetadata;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapGetter;
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
Expand Down Expand Up @@ -439,6 +440,41 @@ void extract_member_someInvalid() {
assertThat(Baggage.fromContext(result)).isEqualTo(expectedBaggage);
}

@ParameterizedTest
@MethodSource
Comment thread
Vcode2407 marked this conversation as resolved.
@SuppressLogger(Parser.class)
void extract_member_invalidPercentEncoding_preservesValidMembers(
String header, Baggage expectedBaggage) {
W3CBaggagePropagator propagator = W3CBaggagePropagator.getInstance();

Context result = propagator.extract(Context.root(), ImmutableMap.of("baggage", header), getter);
assertThat(Baggage.fromContext(result)).isEqualTo(expectedBaggage);
}

static Stream<Arguments> extract_member_invalidPercentEncoding_preservesValidMembers() {
return Stream.of(
Arguments.argumentSet(
"invalid entry at beginning",
"bad=va%lue,key1=value1,encoded=value%202",
Baggage.builder().put("key1", "value1").put("encoded", "value 2").build()),
Arguments.argumentSet(
"invalid entry in middle",
"key1=value1,bad=va%lue,encoded=value%202,key2=value2",
Baggage.builder()
.put("key1", "value1")
.put("encoded", "value 2")
.put("key2", "value2")
.build()),
Arguments.argumentSet(
"invalid entry at end",
"key1=value1,encoded=value%202,bad=va%lue",
Baggage.builder().put("key1", "value1").put("encoded", "value 2").build()),
Arguments.argumentSet(
"multiple invalid entries",
"bad1=va%lue,key1=value1,bad2=value%GG,encoded=value%202,bad3=value;meta=%GG",
Baggage.builder().put("key1", "value1").put("encoded", "value 2").build()));
}

@Test
void extract_nullContext() {
assertThat(W3CBaggagePropagator.getInstance().extract(null, Collections.emptyMap(), getter))
Expand Down
Loading