Don't crash on empty tracestate value (#3104)

This commit is contained in:
Anuraag Agrawal 2021-04-06 00:13:39 +09:00 committed by GitHub
parent 43e0f5e1b1
commit d110a6075c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View File

@ -5,6 +5,7 @@
package io.opentelemetry.api.trace;
import io.opentelemetry.api.internal.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -158,7 +159,7 @@ final class ArrayBasedTraceStateBuilder implements TraceStateBuilder {
// Value is opaque string up to 256 characters printable ASCII RFC0020 characters (i.e., the range
// 0x20 to 0x7E) except comma , and =.
private static boolean isValueValid(@Nullable String value) {
if (value == null) {
if (StringUtils.isNullOrEmpty(value)) {
return false;
}
if (value.length() > VALUE_MAX_SIZE || value.charAt(value.length() - 1) == ' ' /* '\u0020' */) {

View File

@ -436,6 +436,24 @@ class W3CTraceContextPropagatorTest {
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getSampled(), TraceState.getDefault()));
}
@Test
void extract_InvalidTracestate_EmptyValue() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(
W3CTraceContextPropagator.TRACE_PARENT,
"00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-01");
invalidHeaders.put(W3CTraceContextPropagator.TRACE_STATE, "foo=,test=test");
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16,
SPAN_ID_BASE16,
TraceFlags.getSampled(),
TraceState.builder().put("test", "test").build()));
}
@Test
void extract_InvalidTracestate_OneString() {
Map<String, String> invalidHeaders = new HashMap<>();