From: Brad Fitzpatrick Date: Tue, 21 Mar 2017 06:34:35 +0000 (+0000) Subject: flag: validate Int and Uint values to be in range X-Git-Tag: go1.9beta1~1062 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c65ceff125ded084c6f3b47f830050339e7cc74e;p=gostls13.git flag: validate Int and Uint values to be in range Fixes #19230 Change-Id: I38df9732b88f0328506e74f1a46f52adf47db1e5 Reviewed-on: https://go-review.googlesource.com/38419 Reviewed-by: Robert Griesemer Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/flag/flag.go b/src/flag/flag.go index bbbc55a279..b166c5753a 100644 --- a/src/flag/flag.go +++ b/src/flag/flag.go @@ -114,7 +114,7 @@ func newIntValue(val int, p *int) *intValue { } func (i *intValue) Set(s string) error { - v, err := strconv.ParseInt(s, 0, 64) + v, err := strconv.ParseInt(s, 0, strconv.IntSize) *i = intValue(v) return err } @@ -150,7 +150,7 @@ func newUintValue(val uint, p *uint) *uintValue { } func (i *uintValue) Set(s string) error { - v, err := strconv.ParseUint(s, 0, 64) + v, err := strconv.ParseUint(s, 0, strconv.IntSize) *i = uintValue(v) return err } diff --git a/src/flag/flag_test.go b/src/flag/flag_test.go index e2319ec94c..02da2c7750 100644 --- a/src/flag/flag_test.go +++ b/src/flag/flag_test.go @@ -10,6 +10,7 @@ import ( "fmt" "os" "sort" + "strconv" "strings" "testing" "time" @@ -415,3 +416,19 @@ func TestPrintDefaults(t *testing.T) { t.Errorf("got %q want %q\n", got, defaultOutput) } } + +// Issue 19230: validate range of Int and Uint flag values. +func TestIntFlagOverflow(t *testing.T) { + if strconv.IntSize != 32 { + return + } + ResetForTesting(nil) + Int("i", 0, "") + Uint("u", 0, "") + if err := Set("i", "2147483648"); err == nil { + t.Error("unexpected success setting Int") + } + if err := Set("u", "4294967296"); err == nil { + t.Error("unexpected success setting Uint") + } +}