From 7ee20d77cbb00ce040169993da778d3c85c70dcf Mon Sep 17 00:00:00 2001 From: Marco Jantke Date: Sat, 19 Aug 2017 23:31:56 +0200 Subject: [PATCH] validate ConstLabels values in NewDesc --- prometheus/desc.go | 7 +++++++ prometheus/desc_test.go | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 prometheus/desc_test.go diff --git a/prometheus/desc.go b/prometheus/desc.go index 1835b16..4c67346 100644 --- a/prometheus/desc.go +++ b/prometheus/desc.go @@ -122,6 +122,12 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * for _, labelName := range labelNames { labelValues = append(labelValues, constLabels[labelName]) } + // Validate the const label values. They can't have a wrong cardinality, so + // use in len(labelValues) as expectedNumberOfValues. + if err := validateLabelValues(labelValues, len(labelValues)); err != nil { + d.err = err + return d + } // Now add the variable label names, but prefix them with something that // cannot be in a regular label name. That prevents matching the label // dimension with a different mix between preset and variable labels. @@ -137,6 +143,7 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * d.err = errors.New("duplicate label names") return d } + vh := hashNew() for _, val := range labelValues { vh = hashAdd(vh, val) diff --git a/prometheus/desc_test.go b/prometheus/desc_test.go new file mode 100644 index 0000000..2f96265 --- /dev/null +++ b/prometheus/desc_test.go @@ -0,0 +1,17 @@ +package prometheus + +import ( + "testing" +) + +func TestNewDescInvalidLabelValues(t *testing.T) { + desc := NewDesc( + "sample_label", + "sample label", + nil, + Labels{"a": "\xFF"}, + ) + if desc.err == nil { + t.Errorf("NewDesc: expected error because: %s", desc.err) + } +}