Skip to content

Commit a0659c9

Browse files
committed
explicitly return a string for String method instead of panic
Signed-off-by: Adam D. Cornett <adc@redhat.com>
1 parent 525d5b9 commit a0659c9

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

pkg/imagename/imagename.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ const (
1919
ExplicitTag
2020
// ExplicitNamespace forces a namespace in the repo, will use "library" if no namespace
2121
ExplicitNamespace
22+
// invalidImageNameString used in Stringer method to represent invalid ImageName
23+
invalidImageNameString = "<invalid>"
2224
)
2325

2426
var (
@@ -121,10 +123,14 @@ func (imageName *ImageName) Enclose(organization string) {
121123
// String returns the string representation of the image using
122124
// the registry and tag formatting.
123125
func (imageName *ImageName) String() string {
124-
result, err := imageName.ToString(Registry | Tag)
126+
// Guard against nil receiver; Stringer implementations should not panic.
127+
if imageName == nil {
128+
return invalidImageNameString
129+
}
130+
result, err := imageName.ToString(DefaultGetStringOptions)
125131

126132
if err != nil {
127-
panic(err)
133+
return invalidImageNameString
128134
}
129135

130136
return result

pkg/imagename/imagename_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,19 @@ var _ = Describe("ImageNameParse", func() {
5959
),
6060
)
6161

62+
DescribeTable("String() returns <invalid> for invalid ImageNames",
63+
func(imageName *ImageName, expectedString string) {
64+
// String() should never panic, even for invalid ImageNames
65+
Expect(imageName.String()).To(Equal(expectedString))
66+
},
67+
Entry("nil ImageName", (*ImageName)(nil), invalidImageNameString),
68+
Entry("empty ImageName", &ImageName{}, invalidImageNameString),
69+
Entry("missing repo", &ImageName{Registry: "example.com", Namespace: "namespace", Repo: "", Tag: "latest"}, invalidImageNameString),
70+
Entry("only registry", &ImageName{Registry: "example.com"}, invalidImageNameString),
71+
Entry("only namespace", &ImageName{Namespace: "namespace"}, invalidImageNameString),
72+
Entry("only tag", &ImageName{Tag: "latest"}, invalidImageNameString),
73+
)
74+
6275
DescribeTable("encloses",
6376
func(repo, organization, enclosedRepo, registry, tag string) {
6477
reference := repo

0 commit comments

Comments
 (0)