From 8f6a317fefedc7ce6423a085f4fcce96938fe858 Mon Sep 17 00:00:00 2001 From: Keith Zantow Date: Wed, 22 Feb 2023 10:32:05 -0500 Subject: [PATCH] fix: issue when matching format versions (#1585) Signed-off-by: Keith Zantow --- syft/formats/formats.go | 7 +----- syft/formats/formats_test.go | 49 ++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/syft/formats/formats.go b/syft/formats/formats.go index f3e4721e8..13af6cf05 100644 --- a/syft/formats/formats.go +++ b/syft/formats/formats.go @@ -85,14 +85,9 @@ func versionMatches(version string, match string) bool { return true } - dots := strings.Count(match, ".") - if dots == 0 { - match += ".*" - } match = strings.ReplaceAll(match, ".", "\\.") match = strings.ReplaceAll(match, "*", ".*") - match = strings.ReplaceAll(match, "\\..*", "(\\..*)*") - match = fmt.Sprintf("^%s$", match) + match = fmt.Sprintf("^%s(\\..*)*$", match) matcher, err := regexp.Compile(match) if err != nil { return false diff --git a/syft/formats/formats_test.go b/syft/formats/formats_test.go index 3d591b4cf..60dae72c9 100644 --- a/syft/formats/formats_test.go +++ b/syft/formats/formats_test.go @@ -227,12 +227,61 @@ func Test_versionMatches(t *testing.T) { match: "3.1", matches: true, }, + { + name: "wildcard-version matches minor", + version: "7.1.3", + match: "7.*", + matches: true, + }, + { + name: "wildcard-version matches patch", + version: "7.4.8", + match: "7.4.*", + matches: true, + }, + { + name: "sub-version matches major", + version: "7.19.11", + match: "7", + matches: true, + }, + { + name: "sub-version matches minor", + version: "7.55.2", + match: "7.55", + matches: true, + }, + { + name: "sub-version matches patch", + version: "7.32.6", + match: "7.32.6", + matches: true, + }, + // negative tests { name: "different number does not match", version: "3", match: "4", matches: false, }, + { + name: "sub-version doesn't match major", + version: "7.2.5", + match: "8.2.5", + matches: false, + }, + { + name: "sub-version doesn't match minor", + version: "7.2.9", + match: "7.1", + matches: false, + }, + { + name: "sub-version doesn't match patch", + version: "7.32.6", + match: "7.32.5", + matches: false, + }, } for _, test := range tests {