Skip to content

Commit 6d47b8e

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 6d47b8e

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

pkg/imagename/imagename.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@ const (
2121
ExplicitNamespace
2222
)
2323

24+
const (
25+
// invalidImageNameString used in Stringer method to represent invalid ImageName
26+
invalidImageNameString = "<invalid>"
27+
)
28+
2429
var (
2530
// DefaultGetStringOptions is the default set of options
26-
DefaultGetStringOptions FormatOption = Registry | Tag
31+
DefaultGetStringOptions = Registry | Tag
2732

2833
// ErrNoImageRepository returns when there is there is no image repository
2934
ErrNoImageRepository = errors.New("No image repository specified")
@@ -121,10 +126,14 @@ func (imageName *ImageName) Enclose(organization string) {
121126
// String returns the string representation of the image using
122127
// the registry and tag formatting.
123128
func (imageName *ImageName) String() string {
124-
result, err := imageName.ToString(Registry | Tag)
129+
// Guard against nil receiver; Stringer implementations should not panic.
130+
if imageName == nil {
131+
return invalidImageNameString
132+
}
133+
result, err := imageName.ToString(DefaultGetStringOptions)
125134

126135
if err != nil {
127-
panic(err)
136+
return invalidImageNameString
128137
}
129138

130139
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)