Skip to content

Commit cae7a76

Browse files
committed
don't segfault on wrong option combination
Golang flags attempt to use an empty struct when they print defaults for usage information.
1 parent e9c1738 commit cae7a76

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

string_array.go

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ func NewStringArray() *StringArray {
1818
}
1919

2020
func (a StringArray) Get() interface{} {
21+
if a.stringArray == nil {
22+
return nil
23+
}
2124
return *a.stringArray
2225
}
2326

@@ -27,5 +30,8 @@ func (a StringArray) Set(s string) error {
2730
}
2831

2932
func (a StringArray) String() string {
33+
if a.stringArray == nil {
34+
return ""
35+
}
3036
return strings.Join(*a.stringArray, ",")
3137
}

string_array_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"flag"
45
"testing"
56

67
"github.com/bmizerany/assert"
@@ -20,3 +21,13 @@ func TestStringArray(t *testing.T) {
2021
}
2122
assert.Equal(t, "foo,bar", sa.String())
2223
}
24+
25+
func TestStringArrayInFlagSet(t *testing.T) {
26+
sa := NewStringArray()
27+
28+
// flagset tries to grab an empty interface of each flag and invokes
29+
// their .String() method to check whether they are empty
30+
flagSet := flag.NewFlagSet("cool flagset", flag.ExitOnError)
31+
flagSet.Var(sa, "favourite colours", "colourful storm")
32+
flagSet.PrintDefaults()
33+
}

0 commit comments

Comments
 (0)