File tree Expand file tree Collapse file tree 2 files changed +15
-3
lines changed
prometheus_client/openmetrics Expand file tree Collapse file tree 2 files changed +15
-3
lines changed Original file line number Diff line number Diff line change @@ -139,9 +139,12 @@ def _parse_labels_with_state_machine(text):
139139 if char == '\\ ' :
140140 state = 'labelvalueslash'
141141 elif char == '"' :
142- if not METRIC_LABEL_NAME_RE .match ('' .join (labelname )):
143- raise ValueError ("Invalid line: " + text )
144- labels ['' .join (labelname )] = '' .join (labelvalue )
142+ ln = '' .join (labelname )
143+ if not METRIC_LABEL_NAME_RE .match (ln ):
144+ raise ValueError ("Invalid line, bad label name: " + text )
145+ if ln in labels :
146+ raise ValueError ("Invalid line, duplicate label name: " + text )
147+ labels [ln ] = '' .join (labelvalue )
145148 labelname = []
146149 labelvalue = []
147150 state = 'endoflabelvalue'
@@ -217,6 +220,10 @@ def _parse_labels(text):
217220 # Replace escaping if needed
218221 if "\\ " in label_value :
219222 label_value = _replace_escaping (label_value )
223+ if not METRIC_LABEL_NAME_RE .match (label_name ):
224+ raise ValueError ("invalid line, bad label name: " + text )
225+ if label_name in labels :
226+ raise ValueError ("invalid line, duplicate label name: " + text )
220227 labels [label_name ] = label_value
221228
222229 # Remove the processed label from the sub-slice for next iteration
Original file line number Diff line number Diff line change @@ -560,6 +560,11 @@ def test_invalid_input(self):
560560 ('a{a="1"b="2"} 1\n # EOF\n ' ),
561561 ('a{a="1",,b="2"} 1\n # EOF\n ' ),
562562 ('a{a="1",b="2",} 1\n # EOF\n ' ),
563+ # Invalid labels.
564+ ('a{1="1"} 1\n # EOF\n ' ),
565+ ('a{a="1",a="1"} 1\n # EOF\n ' ),
566+ ('a{1=" # "} 1\n # EOF\n ' ),
567+ ('a{a=" # ",a=" # "} 1\n # EOF\n ' ),
563568 # Missing value.
564569 ('a\n # EOF\n ' ),
565570 ('a \n # EOF\n ' ),
You can’t perform that action at this time.
0 commit comments