Skip to content

Commit 43398d3

Browse files
committed
Fix bracket handling in StringToString (#413)
1 parent d5e0c06 commit 43398d3

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

string_to_string.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ func (s *stringToStringValue) String() string {
7777
}
7878

7979
func stringToStringConv(val string) (interface{}, error) {
80-
val = strings.Trim(val, "[]")
80+
if strings.HasPrefix(val, "[") && strings.HasSuffix(val, "]") {
81+
val = strings.TrimPrefix(val, "[")
82+
val = strings.TrimSuffix(val, "]")
83+
}
8184
// An empty string would cause an empty map
8285
if len(val) == 0 {
8386
return map[string]string{}, nil

string_to_string_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,3 +160,34 @@ func TestS2SCalledTwice(t *testing.T) {
160160
}
161161
}
162162
}
163+
164+
// Regression test for a parsing bug triggered when []
165+
// was the last item processed in (random order) map iteration
166+
// Using [] as the only value makes he bug reproducible
167+
func TestS2SBracketValue(t *testing.T) {
168+
var s2s map[string]string
169+
f := setUpS2SFlagSet(&s2s)
170+
171+
vals := map[string]string{"a": "[]"}
172+
arg := fmt.Sprintf("--s2s=%s", createS2SFlag(vals))
173+
err := f.Parse([]string{arg})
174+
if err != nil {
175+
t.Fatal("expected no error; got", err)
176+
}
177+
178+
for k, v := range s2s {
179+
if vals[k] != v {
180+
t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
181+
}
182+
}
183+
184+
getS2S, err := f.GetStringToString("s2s")
185+
if err != nil {
186+
t.Fatal("got an error from GetStringToString():", err)
187+
}
188+
for k, v := range getS2S {
189+
if vals[k] != v {
190+
t.Fatalf("expected s2s[%s] to be %s from GetStringToString but got: %s", k, vals[k], v)
191+
}
192+
}
193+
}

0 commit comments

Comments
 (0)