From 55b2d74e508d1067b2f6a6ecf9d1d8c4e335eb40 Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Mon, 31 Jan 2022 14:25:22 -0500 Subject: add internal/cvss/badmetric.go --- internal/cvss/badmetric.go | 20 ++++++++++++++++++++ internal/cvss/cvss.go | 11 +++++------ 2 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 internal/cvss/badmetric.go (limited to 'internal/cvss') diff --git a/internal/cvss/badmetric.go b/internal/cvss/badmetric.go new file mode 100644 index 0000000..e7c3f4c --- /dev/null +++ b/internal/cvss/badmetric.go @@ -0,0 +1,20 @@ +// CVSS vector parser. +package cvss + +import "fmt" + +// Bad metric error. +type badMetric struct { + version Version // CVSS version + val string // metric value +} + +// Create new bad key error. +func newBadMetric(version Version, val string) error { + return &badMetric { version, val } +} + +// Return printable error string. +func (e badMetric) Error() string { + return fmt.Sprintf("invalid CVSS %s metric: %s", e.version, e.val) +} diff --git a/internal/cvss/cvss.go b/internal/cvss/cvss.go index 057a163..41422f7 100644 --- a/internal/cvss/cvss.go +++ b/internal/cvss/cvss.go @@ -2,7 +2,6 @@ package cvss import ( - "fmt" "strings" ) @@ -235,7 +234,7 @@ func getV2MetricFromString(s string) (v2Metric, error) { // get metric m, ok := v2MetricStrLut[s] if !ok { - return v2InvalidMetric, fmt.Errorf("invalid metric: %s", s) + return v2InvalidMetric, newBadMetric(V20, s) } // return success @@ -725,11 +724,11 @@ func (m v3Metric) Key() Key { } // Convert string to CVSS 3.1 metric. -func getV3Metric(s string) (v3Metric, error) { +func getV3Metric(version Version, s string) (v3Metric, error) { // get metric m, ok := v3MetricStrLut[s] if !ok { - return v3InvalidMetric, fmt.Errorf("invalid metric: %s", s) + return v3InvalidMetric, newBadMetric(version, s) } // return success @@ -782,7 +781,7 @@ func newV30Vector(s string) (Vector, error) { // walk metric strings for i, ms := range(strs) { // convert metric string to metric - m, err := getV3Metric(ms) + m, err := getV3Metric(V30, ms) if err != nil { return nil, err } @@ -841,7 +840,7 @@ func newV31Vector(s string) (Vector, error) { // walk metric strings for i, ms := range(strs) { // get metric from string - m, err := getV3Metric(ms) + m, err := getV3Metric(V31, ms) if err != nil { return nil, err } -- cgit v1.2.3