aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/cvss/badmetric.go20
-rw-r--r--internal/cvss/cvss.go11
2 files changed, 25 insertions, 6 deletions
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
}