File tree 2 files changed +15
-3
lines changed
prometheus_client/openmetrics 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):
139
139
if char == '\\ ' :
140
140
state = 'labelvalueslash'
141
141
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 )
145
148
labelname = []
146
149
labelvalue = []
147
150
state = 'endoflabelvalue'
@@ -217,6 +220,10 @@ def _parse_labels(text):
217
220
# Replace escaping if needed
218
221
if "\\ " in label_value :
219
222
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 )
220
227
labels [label_name ] = label_value
221
228
222
229
# 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):
560
560
('a{a="1"b="2"} 1\n # EOF\n ' ),
561
561
('a{a="1",,b="2"} 1\n # EOF\n ' ),
562
562
('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 ' ),
563
568
# Missing value.
564
569
('a\n # EOF\n ' ),
565
570
('a \n # EOF\n ' ),
You can’t perform that action at this time.
0 commit comments