Skip to content

Commit 88a2db6

Browse files
authored
Merge pull request #4534 from DataDog/munir/fix-128-trace-id-validations
fix(datadog-headers): ignore invalid tid values in x-datadog-tags
2 parents f8005b9 + 855b4ab commit 88a2db6

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

lib/datadog/tracing/distributed/datadog.rb

+2
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ def build_tags(digest)
116116
def extract_trace_id!(trace_id, tags)
117117
return trace_id unless tags
118118
return trace_id unless (high_order = tags.delete(Tracing::Metadata::Ext::Distributed::TAG_TID))
119+
return trace_id unless high_order.size == 16
120+
return trace_id unless /\A[0-9a-f]+\z/i.match?(high_order)
119121

120122
Tracing::Utils::TraceId.concatenate(high_order.to_i(16), trace_id)
121123
end

spec/datadog/tracing/distributed/datadog_spec.rb

+22
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,28 @@
503503
it { expect(digest.span_id).to eq(0xbbbbbbbbbbbbbbbb) }
504504
it { expect(digest.trace_distributed_tags).not_to include('_dd.p.tid') }
505505
end
506+
507+
context 'with a trace id and an invalid distributed tags `_dd.p.tid`' do
508+
[
509+
'00123456789abcdef', # too long
510+
'234567890abcdef', # too short
511+
'g123456789abcdef', # invalid character
512+
].each do |invalid_trace_id|
513+
context "when given invalid trace_id: #{invalid_trace_id}" do
514+
let(:data) do
515+
{
516+
prepare_key['x-datadog-trace-id'] => 0xffffffffffffffff.to_s,
517+
prepare_key['x-datadog-parent-id'] => 0xbbbbbbbbbbbbbbbb.to_s,
518+
prepare_key['x-datadog-tags'] => "_dd.p.tid= #{invalid_trace_id}"
519+
}
520+
end
521+
522+
it { expect(digest.trace_id).to eq(0xffffffffffffffff) }
523+
it { expect(digest.span_id).to eq(0xbbbbbbbbbbbbbbbb) }
524+
it { expect(digest.trace_distributed_tags).not_to include('_dd.p.tid') }
525+
end
526+
end
527+
end
506528
end
507529
end
508530

0 commit comments

Comments
 (0)