Skip to content

Commit d34b66b

Browse files
authored
Validate the span id and trace id when creating the SpanContext (open-telemetry#2728)
And, remove that extra validation from propagators.
1 parent 522953b commit d34b66b

File tree

4 files changed

+16
-32
lines changed

4 files changed

+16
-32
lines changed

api/all/src/main/java/io/opentelemetry/api/trace/ImmutableSpanContext.java

+12-3
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,30 @@
1414
abstract class ImmutableSpanContext implements SpanContext {
1515

1616
static final SpanContext INVALID =
17-
create(
17+
createInternal(
1818
TraceId.getInvalid(),
1919
SpanId.getInvalid(),
2020
TraceFlags.getDefault(),
2121
TraceState.getDefault(),
2222
/* remote= */ false);
2323

24+
private static AutoValue_ImmutableSpanContext createInternal(
25+
String traceId, String spanId, TraceFlags traceFlags, TraceState traceState, boolean remote) {
26+
return new AutoValue_ImmutableSpanContext(
27+
traceId, spanId, traceFlags, traceState, /* remote$= */ remote);
28+
}
29+
2430
static SpanContext create(
2531
String traceIdHex,
2632
String spanIdHex,
2733
TraceFlags traceFlags,
2834
TraceState traceState,
2935
boolean remote) {
30-
return new AutoValue_ImmutableSpanContext(
31-
traceIdHex, spanIdHex, traceFlags, traceState, remote);
36+
if (SpanId.isValid(spanIdHex) && TraceId.isValid(traceIdHex)) {
37+
return createInternal(traceIdHex, spanIdHex, traceFlags, traceState, remote);
38+
}
39+
return createInternal(
40+
TraceId.getInvalid(), SpanId.getInvalid(), traceFlags, traceState, remote);
3241
}
3342

3443
@Override

api/all/src/main/java/io/opentelemetry/api/trace/propagation/W3CTraceContextPropagator.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,10 @@ private static SpanContext extractContextFromTraceParent(String traceparent) {
214214
String traceId =
215215
traceparent.substring(TRACE_ID_OFFSET, TRACE_ID_OFFSET + TraceId.getLength());
216216
String spanId = traceparent.substring(SPAN_ID_OFFSET, SPAN_ID_OFFSET + SpanId.getLength());
217-
if (TraceId.isValid(traceId) && SpanId.isValid(spanId)) {
218-
TraceFlags traceFlags = TraceFlags.fromHex(traceparent, TRACE_OPTION_OFFSET);
219-
return SpanContext.createFromRemoteParent(
220-
traceId, spanId, traceFlags, TraceState.getDefault());
221-
}
222-
return SpanContext.getInvalid();
217+
218+
TraceFlags traceFlags = TraceFlags.fromHex(traceparent, TRACE_OPTION_OFFSET);
219+
return SpanContext.createFromRemoteParent(
220+
traceId, spanId, traceFlags, TraceState.getDefault());
223221
} catch (IllegalArgumentException e) {
224222
logger.fine("Unparseable traceparent header. Returning INVALID span context.");
225223
return SpanContext.getInvalid();

extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagator.java

-20
Original file line numberDiff line numberDiff line change
@@ -171,26 +171,6 @@ private static <C> SpanContext getSpanContextFromHeader(C carrier, Getter<C> get
171171
}
172172
// TODO: Put the arbitrary TraceHeader keys in OT trace state
173173
}
174-
if (!TraceId.isValid(traceId)) {
175-
logger.fine(
176-
"Invalid TraceId in X-Ray trace header: '"
177-
+ TRACE_HEADER_KEY
178-
+ "' with value "
179-
+ traceHeader
180-
+ "'. Returning INVALID span context.");
181-
return SpanContext.getInvalid();
182-
}
183-
184-
if (!SpanId.isValid(spanId)) {
185-
logger.fine(
186-
"Invalid ParentId in X-Ray trace header: '"
187-
+ TRACE_HEADER_KEY
188-
+ "' with value "
189-
+ traceHeader
190-
+ "'. Returning INVALID span context.");
191-
return SpanContext.getInvalid();
192-
}
193-
194174
if (isSampled == null) {
195175
logger.fine(
196176
"Invalid Sampling flag in X-Ray trace header: '"

extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerPropagator.java

-3
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,6 @@ private static SpanContext buildSpanContext(String traceId, String spanId, Strin
240240
try {
241241
String otelTraceId = StringUtils.padLeft(traceId, MAX_TRACE_ID_LENGTH);
242242
String otelSpanId = StringUtils.padLeft(spanId, MAX_SPAN_ID_LENGTH);
243-
if (!TraceId.isValid(otelTraceId) || !SpanId.isValid(otelSpanId)) {
244-
return SpanContext.getInvalid();
245-
}
246243
int flagsInt = Integer.parseInt(flags);
247244
return SpanContext.createFromRemoteParent(
248245
otelTraceId,

0 commit comments

Comments
 (0)