1
0
mirror of https://github.com/golang/go synced 2024-11-18 02:14:45 -07:00

time: don't panic stringifying the zero Month

Fixes #17720

Change-Id: Ib95c230deef3934db729856c17908f8e5a1e2b7f
Reviewed-on: https://go-review.googlesource.com/33145
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
Brad Fitzpatrick 2016-11-11 20:54:07 +00:00
parent e0aedfb496
commit a18b4b3fb9
2 changed files with 21 additions and 3 deletions

View File

@ -114,7 +114,18 @@ var months = [...]string{
}
// String returns the English name of the month ("January", "February", ...).
func (m Month) String() string { return months[m-1] }
func (m Month) String() string {
if January <= m && m <= December {
return months[m-1]
}
const prefix = "%!Month("
buf := make([]byte, 20+len(prefix)+1)
buf[len(buf)-1] = ')'
n := fmtInt(buf[:len(buf)-1], uint64(m))
n -= len(prefix)
copy(buf[n:], prefix)
return string(buf[n:])
}
// A Weekday specifies a day of the week (Sunday = 0, ...).
type Weekday int

View File

@ -1118,7 +1118,7 @@ var defaultLocTests = []struct {
{"Truncate", func(t1, t2 Time) bool { return t1.Truncate(Hour).Equal(t2.Truncate(Hour)) }},
{"Round", func(t1, t2 Time) bool { return t1.Round(Hour).Equal(t2.Round(Hour)) }},
{"== Time{}", func(t1, t2 Time) bool { return (t1==Time{}) == (t2==Time{}) }},
{"== Time{}", func(t1, t2 Time) bool { return (t1 == Time{}) == (t2 == Time{}) }},
}
func TestDefaultLoc(t *testing.T) {
@ -1230,3 +1230,10 @@ func TestMarshalBinaryZeroTime(t *testing.T) {
t.Errorf("t0=%#v\nt1=%#v\nwant identical structures", t0, t1)
}
}
// Issue 17720: Zero value of time.Month fails to print
func TestZeroMonthString(t *testing.T) {
if got, want := Month(0).String(), "%!Month(0)"; got != want {
t.Errorf("zero month = %q; want %q", got, want)
}
}