Don't crash on empty tracestate value (#3104)
This commit is contained in:
parent
43e0f5e1b1
commit
d110a6075c
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.api.trace;
|
package io.opentelemetry.api.trace;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.internal.StringUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
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
|
// Value is opaque string up to 256 characters printable ASCII RFC0020 characters (i.e., the range
|
||||||
// 0x20 to 0x7E) except comma , and =.
|
// 0x20 to 0x7E) except comma , and =.
|
||||||
private static boolean isValueValid(@Nullable String value) {
|
private static boolean isValueValid(@Nullable String value) {
|
||||||
if (value == null) {
|
if (StringUtils.isNullOrEmpty(value)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (value.length() > VALUE_MAX_SIZE || value.charAt(value.length() - 1) == ' ' /* '\u0020' */) {
|
if (value.length() > VALUE_MAX_SIZE || value.charAt(value.length() - 1) == ' ' /* '\u0020' */) {
|
||||||
|
|
|
||||||
|
|
@ -436,6 +436,24 @@ class W3CTraceContextPropagatorTest {
|
||||||
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getSampled(), TraceState.getDefault()));
|
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
|
@Test
|
||||||
void extract_InvalidTracestate_OneString() {
|
void extract_InvalidTracestate_OneString() {
|
||||||
Map<String, String> invalidHeaders = new HashMap<>();
|
Map<String, String> invalidHeaders = new HashMap<>();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue