Avoid panic for missing flag value
Currently, in cases where a flag value is required but not passed and short-option handling is enabled, a panic will occur due to a nil pointer dereference. This prevents that situation from occurring, instead propagating the appropriate error.
This commit is contained in:
@@ -70,29 +70,34 @@ func TestParseAndRunShortOpts(t *testing.T) {
|
||||
{[]string{"foo", "test", "-af"}, nil, []string{}},
|
||||
{[]string{"foo", "test", "-cf"}, nil, []string{}},
|
||||
{[]string{"foo", "test", "-acf"}, nil, []string{}},
|
||||
{[]string{"foo", "test", "-invalid"}, errors.New("flag provided but not defined: -invalid"), []string{}},
|
||||
{[]string{"foo", "test", "-invalid"}, errors.New("flag provided but not defined: -invalid"), nil},
|
||||
{[]string{"foo", "test", "-acf", "arg1", "-invalid"}, nil, []string{"arg1", "-invalid"}},
|
||||
}
|
||||
|
||||
var args []string
|
||||
cmd := Command{
|
||||
Name: "test",
|
||||
Usage: "this is for testing",
|
||||
Description: "testing",
|
||||
Action: func(c *Context) error {
|
||||
args = c.Args()
|
||||
return nil
|
||||
},
|
||||
SkipArgReorder: true,
|
||||
UseShortOptionHandling: true,
|
||||
Flags: []Flag{
|
||||
BoolFlag{Name: "abc, a"},
|
||||
BoolFlag{Name: "cde, c"},
|
||||
BoolFlag{Name: "fgh, f"},
|
||||
},
|
||||
{[]string{"foo", "test", "-acfi", "not-arg", "arg1", "-invalid"}, nil, []string{"arg1", "-invalid"}},
|
||||
{[]string{"foo", "test", "-i", "ivalue"}, nil, []string{}},
|
||||
{[]string{"foo", "test", "-i", "ivalue", "arg1"}, nil, []string{"arg1"}},
|
||||
{[]string{"foo", "test", "-i"}, errors.New("flag needs an argument: -i"), nil},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
var args []string
|
||||
cmd := Command{
|
||||
Name: "test",
|
||||
Usage: "this is for testing",
|
||||
Description: "testing",
|
||||
Action: func(c *Context) error {
|
||||
args = c.Args()
|
||||
return nil
|
||||
},
|
||||
SkipArgReorder: true,
|
||||
UseShortOptionHandling: true,
|
||||
Flags: []Flag{
|
||||
BoolFlag{Name: "abc, a"},
|
||||
BoolFlag{Name: "cde, c"},
|
||||
BoolFlag{Name: "fgh, f"},
|
||||
StringFlag{Name: "ijk, i"},
|
||||
},
|
||||
}
|
||||
|
||||
app := NewApp()
|
||||
app.Commands = []Command{cmd}
|
||||
|
||||
|
Reference in New Issue
Block a user