]> Cypherpunks repositories - gostls13.git/commitdiff
time: don't panic when stringifying Weekday
authorfraenkel <michael.fraenkel@gmail.com>
Thu, 12 Apr 2018 01:18:58 +0000 (21:18 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 12 Apr 2018 04:56:57 +0000 (04:56 +0000)
Fixes #24692

Change-Id: I14058cd3968d08fbcfc275f1b13b6dba9e3c5068
Reviewed-on: https://go-review.googlesource.com/106535
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/time/time.go
src/time/time_test.go

index 1d7f76c2f2781a82e976bc607ce85513f4245684..6579639740987ce606d95669aaa824e3985fbcb5 100644 (file)
@@ -323,7 +323,14 @@ var days = [...]string{
 }
 
 // String returns the English name of the day ("Sunday", "Monday", ...).
-func (d Weekday) String() string { return days[d] }
+func (d Weekday) String() string {
+       if Sunday <= d && d <= Saturday {
+               return days[d]
+       }
+       buf := make([]byte, 20)
+       n := fmtInt(buf, uint64(d))
+       return "%!Weekday(" + string(buf[n:]) + ")"
+}
 
 // Computations on time.
 //
index 867e61ea33e23e12dae13b56d779bb57852face9..dee144fe134161863518df066e96f90919f01cde 100644 (file)
@@ -673,7 +673,7 @@ var gobTests = []Time{
        Date(0, 1, 2, 3, 4, 5, 6, UTC),
        Date(7, 8, 9, 10, 11, 12, 13, FixedZone("", 0)),
        Unix(81985467080890095, 0x76543210), // Time.sec: 0x0123456789ABCDEF
-       {},                                  // nil location
+       {}, // nil location
        Date(1, 2, 3, 4, 5, 6, 7, FixedZone("", 32767*60)),
        Date(1, 2, 3, 4, 5, 6, 7, FixedZone("", -32768*60)),
 }
@@ -1319,6 +1319,16 @@ func TestZeroMonthString(t *testing.T) {
        }
 }
 
+// Issue 24692: Out of range weekday panics
+func TestWeekdayString(t *testing.T) {
+       if got, want := Weekday(Tuesday).String(), "Tuesday"; got != want {
+               t.Errorf("Tuesday weekday = %q; want %q", got, want)
+       }
+       if got, want := Weekday(14).String(), "%!Weekday(14)"; got != want {
+               t.Errorf("14th weekday = %q; want %q", got, want)
+       }
+}
+
 func TestReadFileLimit(t *testing.T) {
        const zero = "/dev/zero"
        if _, err := os.Stat(zero); err != nil {