Commit a18b4b3f authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

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: 's avatarIan Lance Taylor <iant@golang.org>
Reviewed-by: 's avatarRob Pike <r@golang.org>
parent e0aedfb4
......@@ -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
......
......@@ -1117,8 +1117,8 @@ 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)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment