diff --git a/api/include/opentelemetry/trace/propagation/http_trace_context.h b/api/include/opentelemetry/trace/propagation/http_trace_context.h index 85fd09201e..836b664051 100644 --- a/api/include/opentelemetry/trace/propagation/http_trace_context.h +++ b/api/include/opentelemetry/trace/propagation/http_trace_context.h @@ -99,7 +99,7 @@ class HttpTraceContext : public HTTPTextFormat uint8_t buf[kTraceIdBytes / 2]; for (int i = 0; i < kTraceIdBytes; i++) { - int tmp = CharToInt(*trc_id); + int tmp = HexToInt(*trc_id); if (tmp < 0) { for (int j = 0; j < kTraceIdBytes / 2; j++) @@ -127,7 +127,7 @@ class HttpTraceContext : public HTTPTextFormat uint8_t buf[kSpanIdBytes / 2]; for (int i = 0; i < kSpanIdBytes; i++) { - int tmp = CharToInt(spn_id[i]); + int tmp = HexToInt(spn_id[i]); if (tmp < 0) { for (int j = 0; j < kSpanIdBytes / 2; j++) @@ -150,8 +150,8 @@ class HttpTraceContext : public HTTPTextFormat static TraceFlags GenerateTraceFlagsFromString(nostd::string_view trace_flags) { - int tmp1 = CharToInt(trace_flags[0]); - int tmp2 = CharToInt(trace_flags[1]); + int tmp1 = HexToInt(trace_flags[0]); + int tmp2 = HexToInt(trace_flags[1]); if (tmp1 < 0 || tmp2 < 0) return TraceFlags(0); // check for invalid char uint8_t buf = tmp1 * 16 + tmp2; @@ -161,7 +161,7 @@ class HttpTraceContext : public HTTPTextFormat private: // Converts a single character to a corresponding integer (e.g. '1' to 1), return -1 // if the character is not a valid number in hex. - static uint8_t CharToInt(char c) + static uint8_t HexToInt(char c) { if (c >= '0' && c <= '9') { @@ -241,12 +241,8 @@ class HttpTraceContext : public HTTPTextFormat nostd::string_view trace_flags = trace_parent.substr( kHeaderElementLengths[0] + kHeaderElementLengths[1] + kHeaderElementLengths[2] + 3); - if (version == "ff") - { - return SpanContext(false, false); - } - - if (trace_id == "00000000000000000000000000000000" || span_id == "0000000000000000") + if (version == "ff" && + (trace_id == "00000000000000000000000000000000" || span_id == "0000000000000000")) { return SpanContext(false, false); } @@ -254,7 +250,9 @@ class HttpTraceContext : public HTTPTextFormat // validate ids if (!IsValidHex(version) || !IsValidHex(trace_id) || !IsValidHex(span_id) || !IsValidHex(trace_flags)) + { return SpanContext(false, false); + } TraceId trace_id_obj = GenerateTraceIdFromString(trace_id); SpanId span_id_obj = GenerateSpanIdFromString(span_id); @@ -269,8 +267,8 @@ class HttpTraceContext : public HTTPTextFormat { return SpanContext(false, false); } - SpanContext context_from_parent_header = ExtractContextFromTraceParent(trace_parent); - return context_from_parent_header; + + return ExtractContextFromTraceParent(trace_parent); } }; } // namespace propagation diff --git a/api/test/trace/propagation/http_text_format_test.cc b/api/test/trace/propagation/http_text_format_test.cc index 78df34fd17..c6262a1606 100644 --- a/api/test/trace/propagation/http_text_format_test.cc +++ b/api/test/trace/propagation/http_text_format_test.cc @@ -38,11 +38,11 @@ static void Setter(std::map &carrier, carrier[std::string(trace_type)] = std::string(trace_description); } -static trace::propagation::HttpTraceContext> format = - trace::propagation::HttpTraceContext>(); - using MapHttpTraceContext = trace::propagation::HttpTraceContext>; + +static MapHttpTraceContext format = MapHttpTraceContext(); + TEST(HTTPTextFormatTest, TraceIdBufferGeneration) { constexpr uint8_t buf[] = {1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};