Skip to content

Commit 35e6ec0

Browse files
committed
Prevent repeated conversions of hex versions to binary
1 parent ebaaaf3 commit 35e6ec0

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,14 @@ 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(nostd::string_view version_hex)
92+
static bool IsValidVersion(uint8_t version_binary)
9393
{
94-
uint8_t version;
95-
detail::HexToBinary(version_hex, &version, sizeof(version));
96-
return version != kInvalidVersion;
94+
return version_binary != kInvalidVersion;
9795
}
9896

99-
static bool IsHigherVersion(nostd::string_view version_hex)
97+
static bool IsHigherVersion(uint8_t version_binary)
10098
{
101-
uint8_t version;
102-
detail::HexToBinary(version_hex, &version, sizeof(version));
103-
return version > kDefaultAssumedVersion;
99+
return version_binary > kDefaultAssumedVersion;
104100
}
105101

106102
static void InjectImpl(context::propagation::TextMapCarrier &carrier,
@@ -153,17 +149,20 @@ class HttpTraceContext : public context::propagation::TextMapPropagator
153149
return SpanContext::GetInvalid();
154150
}
155151

156-
if (!IsValidVersion(version_hex))
152+
// hex is valid, convert it to binary
153+
uint8_t version_binary;
154+
detail::HexToBinary(version_hex, &version_binary, sizeof(version_binary));
155+
if (!IsValidVersion(version_binary))
157156
{
158157
return SpanContext::GetInvalid();
159158
}
160159

161-
if (IsHigherVersion(version_hex) && trace_parent.size() < kTraceParentSize)
160+
if (IsHigherVersion(version_binary) && trace_parent.size() < kTraceParentSize)
162161
{
163162
return SpanContext::GetInvalid();
164163
}
165164

166-
if (!IsHigherVersion(version_hex) && trace_parent.size() != kTraceParentSize)
165+
if (!IsHigherVersion(version_binary) && trace_parent.size() != kTraceParentSize)
167166
{
168167
return SpanContext::GetInvalid();
169168
}

0 commit comments

Comments
 (0)