From 938b73e0bc2851d30246d572d5cefecf57b02041 Mon Sep 17 00:00:00 2001 From: Wissam Abu Ahmad Date: Wed, 28 May 2025 23:19:39 +0200 Subject: [PATCH] BugFix: Skip validating and parsing comment lines early (#1108) (#1109) Signed-off-by: Wissam Abu Ahmad --- prometheus_client/parser.py | 6 +++--- tests/test_parser.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/prometheus_client/parser.py b/prometheus_client/parser.py index 92d66723..0434edf7 100644 --- a/prometheus_client/parser.py +++ b/prometheus_client/parser.py @@ -308,6 +308,9 @@ def build_metric(name: str, documentation: str, typ: str, samples: List[Sample]) continue candidate_name, quoted = '', False if len(parts) > 2: + # Ignore comment tokens + if parts[1] != 'TYPE' and parts[1] != 'HELP': + continue candidate_name, quoted = _unquote_unescape(parts[2]) if not quoted and not _is_valid_legacy_metric_name(candidate_name): raise ValueError @@ -342,9 +345,6 @@ def build_metric(name: str, documentation: str, typ: str, samples: List[Sample]) 'histogram': ['_count', '_sum', '_bucket'], }.get(typ, ['']) allowed_names = [name + n for n in allowed_names] - else: - # Ignore other comment tokens - pass elif line == '': # Ignore blank lines pass diff --git a/tests/test_parser.py b/tests/test_parser.py index 10a2fc90..e18a8782 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -120,6 +120,17 @@ def test_blank_lines_and_comments(self): """) self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families)) + + def test_comments_parts_are_not_validated_against_legacy_metric_name(self): + # https://github.com/prometheus/client_python/issues/1108 + families = text_string_to_metric_families(""" +# A simple. comment line where third token cannot be matched against METRIC_NAME_RE under validation.py +# 3565 12345/4436467 another random comment line where third token cannot be matched against METRIC_NAME_RE under validation.py +""") + self.assertEqualMetrics([], list(families)) + + + def test_tabs(self): families = text_string_to_metric_families("""#\tTYPE\ta\tcounter #\tHELP\ta\thelp