Ensure flag defaults (or envars) aren't scanned in as untyped tokens.

This avoids treating default values starting with "-" as flags.
This commit is contained in:
Alec Thomas
2018-11-06 14:40:02 +11:00
parent 072357f8ba
commit 010e3134ca
2 changed files with 12 additions and 2 deletions
+10
View File
@@ -697,3 +697,13 @@ func TestNumericParamErrors(t *testing.T) {
_, err := parser.Parse([]string{"--name", "-10"}) _, err := parser.Parse([]string{"--name", "-10"})
require.EqualError(t, err, `expected string value but got "-10" (short flag)`) require.EqualError(t, err, `expected string value but got "-10" (short flag)`)
} }
func TestDefaultValueIsHyphen(t *testing.T) {
var cli struct {
Flag string `default:"-"`
}
p := mustNew(t, &cli)
_, err := p.Parse(nil)
require.NoError(t, err)
require.Equal(t, "-", cli.Flag)
}
+2 -2
View File
@@ -302,7 +302,7 @@ func (v *Value) Reset() error {
if v.Tag.Env != "" { if v.Tag.Env != "" {
envar := os.Getenv(v.Tag.Env) envar := os.Getenv(v.Tag.Env)
if envar != "" { if envar != "" {
err := v.Parse(Scan(envar), v.Target) err := v.Parse(ScanFromTokens(Token{Type: FlagValueToken, Value: envar}), v.Target)
if err != nil { if err != nil {
return fmt.Errorf("%s (from envar %s=%q)", err, v.Tag.Env, envar) return fmt.Errorf("%s (from envar %s=%q)", err, v.Tag.Env, envar)
} }
@@ -310,7 +310,7 @@ func (v *Value) Reset() error {
} }
} }
if v.Default != "" { if v.Default != "" {
return v.Parse(Scan(v.Default), v.Target) return v.Parse(ScanFromTokens(Token{Type: FlagValueToken, Value: v.Default}), v.Target)
} }
return nil return nil
} }