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; | ||||
| 
 | ||||
| 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' */) { | ||||
|  |  | |||
|  | @ -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<>(); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue