Skip to content

Commit be96126

Browse files
committed
Fix TraceContextTest.test_traceparent_version_* tests
1 parent ff8d0fa commit be96126

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

api/include/opentelemetry/trace/propagation/http_trace_context.h

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
8787

8888
private:
8989
static constexpr uint8_t kInvalidVersion = 0xFF;
90+
static constexpr uint8_t kDefaultAssumedVersion = 0x00;
9091

9192
static bool IsValidVersion(nostd::string_view version_hex)
9293
{
@@ -95,6 +96,13 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
9596
return version != kInvalidVersion;
9697
}
9798

99+
static bool IsHigherVersion(nostd::string_view version_hex)
100+
{
101+
uint8_t version;
102+
detail::HexToBinary(version_hex, &version, sizeof(version));
103+
return version > kDefaultAssumedVersion;
104+
}
105+
98106
static void InjectImpl(context::propagation::TextMapCarrier &carrier,
99107
const SpanContext &span_context)
100108
{
@@ -122,11 +130,6 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
122130
static SpanContext ExtractContextFromTraceHeaders(nostd::string_view trace_parent,
123131
nostd::string_view trace_state)
124132
{
125-
if (trace_parent.size() != kTraceParentSize)
126-
{
127-
return SpanContext::GetInvalid();
128-
}
129-
130133
std::array<nostd::string_view, 4> fields{};
131134
if (detail::SplitString(trace_parent, '-', fields.data(), 4) != 4)
132135
{
@@ -155,6 +158,16 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
155158
return SpanContext::GetInvalid();
156159
}
157160

161+
if (IsHigherVersion(version_hex) && trace_parent.size() < kTraceParentSize)
162+
{
163+
return SpanContext::GetInvalid();
164+
}
165+
166+
if (!IsHigherVersion(version_hex) && trace_parent.size() != kTraceParentSize)
167+
{
168+
return SpanContext::GetInvalid();
169+
}
170+
158171
TraceId trace_id = TraceIdFromHex(trace_id_hex);
159172
SpanId span_id = SpanIdFromHex(span_id_hex);
160173

0 commit comments

Comments
 (0)