Skip to content

Commit b8c5179

Browse files
Bastian KrolFerenc-
Bastian Krol
authored andcommitted
fix(w3c trace context): consider traceparent format version ff invalid
This is a follow up to commit f283a4b which added some tests for parsing newer versions. One of the tests used format version "ff", which the W3C trace context specification explicitly defines as invalid. This commit fixes that test and also the regex used for parsing the traceparent header, so that a header with version ff will be rejected as invalid. Signed-off-by: Bastian Krol <[email protected]>
1 parent a7a89db commit b8c5179

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

instana/w3c_trace_context/traceparent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
class Traceparent:
1111
SPECIFICATION_VERSION = "00"
12-
TRACEPARENT_REGEX = re.compile("^[0-9a-f]{2}-(?!0{32})([0-9a-f]{32})-(?!0{16})([0-9a-f]{16})-[0-9a-f]{2}")
12+
TRACEPARENT_REGEX = re.compile("^[0-9a-f][0-9a-e]-(?!0{32})([0-9a-f]{32})-(?!0{16})([0-9a-f]{16})-[0-9a-f]{2}")
1313

1414
def validate(self, traceparent):
1515
"""

tests/w3c_trace_context/test_traceparent.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@ def test_validate_valid(self):
1616
def test_validate_newer_version(self):
1717
# Although the incoming traceparent header sports a newer version number, we should still be able to parse the
1818
# parts that we understand (and consider it valid).
19-
traceparent = "ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-12345-abcd"
19+
traceparent = "fe-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-12345-abcd"
2020
self.assertEqual(traceparent, self.tp.validate(traceparent))
2121

2222
def test_validate_unknown_flags(self):
2323
traceparent = "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-ee"
2424
self.assertEqual(traceparent, self.tp.validate(traceparent))
2525

26+
def test_validate_invalid_traceparent_version(self):
27+
traceparent = "ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
28+
self.assertIsNone(self.tp.validate(traceparent))
29+
2630
def test_validate_invalid_traceparent(self):
2731
traceparent = "00-4bxxxxx3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
2832
self.assertIsNone(self.tp.validate(traceparent))
@@ -48,7 +52,7 @@ def test_get_traceparent_fields_unsampled(self):
4852
def test_get_traceparent_fields_newer_version(self):
4953
# Although the incoming traceparent header sports a newer version number, we should still be able to parse the
5054
# parts that we understand (and consider it valid).
51-
traceparent = "ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-12345-abcd"
55+
traceparent = "fe-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-12345-abcd"
5256
version, trace_id, parent_id, sampled_flag = self.tp.get_traceparent_fields(traceparent)
5357
self.assertEqual(trace_id, "4bf92f3577b34da6a3ce929d0e0e4736")
5458
self.assertEqual(parent_id, "00f067aa0ba902b7")

0 commit comments

Comments
 (0)