@@ -89,16 +89,6 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
8989 static constexpr uint8_t kInvalidVersion = 0xFF ;
9090 static constexpr uint8_t kDefaultAssumedVersion = 0x00 ;
9191
92- static bool IsValidVersion (uint8_t version_binary)
93- {
94- return version_binary != kInvalidVersion ;
95- }
96-
97- static bool IsHigherVersion (uint8_t version_binary)
98- {
99- return version_binary > kDefaultAssumedVersion ;
100- }
101-
10292 static void InjectImpl (context::propagation::TextMapCarrier &carrier,
10393 const SpanContext &span_context)
10494 {
@@ -152,19 +142,23 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
152142 // hex is valid, convert it to binary
153143 uint8_t version_binary;
154144 detail::HexToBinary (version_hex, &version_binary, sizeof (version_binary));
155- if (! IsValidVersion ( version_binary) )
145+ if (version_binary == kInvalidVersion )
156146 {
147+ // invalid version encountered
157148 return SpanContext::GetInvalid ();
158149 }
159150
160- if (IsHigherVersion (version_binary) && trace_parent.size () < kTraceParentSize )
161- {
162- return SpanContext::GetInvalid ();
163- }
164-
165- if (!IsHigherVersion (version_binary) && trace_parent.size () != kTraceParentSize )
166- {
167- return SpanContext::GetInvalid ();
151+ // See https://www.w3.org/TR/trace-context/#versioning-of-traceparent
152+ if (version_binary > kDefaultAssumedVersion ) {
153+ // higher than default version detected
154+ if (trace_parent.size () < kTraceParentSize ) {
155+ return SpanContext::GetInvalid ();
156+ }
157+ } else {
158+ // version is either lower or same as the default version
159+ if (trace_parent.size () != kTraceParentSize ) {
160+ return SpanContext::GetInvalid ();
161+ }
168162 }
169163
170164 TraceId trace_id = TraceIdFromHex (trace_id_hex);
0 commit comments