From cac475d2f27693a8d52de26bbb3e3da2a3788d3a Mon Sep 17 00:00:00 2001 From: Aneurin Barker Snook Date: Fri, 12 Jul 2024 11:42:48 +0100 Subject: [PATCH] fix nil version safety --- version.go | 13 +++++++++++++ version_test.go | 3 +++ 2 files changed, 16 insertions(+) diff --git a/version.go b/version.go index 2e3f580..7c1ebc0 100644 --- a/version.go +++ b/version.go @@ -19,6 +19,10 @@ type Version struct { // // Extensions such as pre-release version or build metadata are ignored when comparing versions. func (a *Version) Compare(b *Version) int { + if a == nil || b == nil { + return 0 + } + if a.Major == b.Major { if a.Minor == b.Minor { if a.Patch == b.Patch { @@ -48,12 +52,21 @@ func (a *Version) Less(b *Version) bool { // // See https://semver.org/#is-v123-a-semantic-version func (v *Version) SemanticString() string { + if v == nil { + return "" + } + return fmt.Sprintf("%d.%d.%d%s", v.Major, v.Minor, v.Patch, v.Extension) } func (v *Version) String() string { + if v == nil { + return "" + } + if v.Text != "" { return v.Text } + return v.SemanticString() } diff --git a/version_test.go b/version_test.go index b2a7af7..85df525 100644 --- a/version_test.go +++ b/version_test.go @@ -55,6 +55,9 @@ func TestVersion_Compare(t *testing.T) { {A: MustParse("1.20.0"), B: MustParse("1.2.0"), Expected: 1}, {A: MustParse("1.20.0"), B: MustParse("1.2.20"), Expected: 1}, {A: MustParse("1.20.0"), B: MustParse("1.20.1"), Expected: -1}, + {A: MustParse("1.0.0"), Expected: 0}, + {B: MustParse("1.0.0"), Expected: 0}, + {Expected: 0}, } for i, testCase := range testCases {