浏览代码

fix nil version safety

Aneurin Barker Snook 11 月之前
父节点
当前提交
cac475d2f2
共有 2 个文件被更改,包括 16 次插入0 次删除
  1. 13 0
      version.go
  2. 3 0
      version_test.go

+ 13 - 0
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()
 }

+ 3 - 0
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 {