From 32e117d971eb4f802f27b98a0f13b7d9fc2d73fb Mon Sep 17 00:00:00 2001 From: Cholerae Hu Date: Tue, 25 Jul 2017 14:04:50 +0800 Subject: [PATCH] time: don't match '---' month in time.Parse The existing implementation will panic when month in date string is '---'. Fixed #21113 Change-Id: I8058ae7a4102e882f8b7e9c65d80936b563265e4 Reviewed-on: https://go-review.googlesource.com/51010 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/time/format.go | 4 ++-- src/time/format_test.go | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/time/format.go b/src/time/format.go index c960df01978c5..05f734eae7bf9 100644 --- a/src/time/format.go +++ b/src/time/format.go @@ -289,7 +289,6 @@ var shortDayNames = []string{ } var shortMonthNames = []string{ - "---", "Jan", "Feb", "Mar", @@ -305,7 +304,6 @@ var shortMonthNames = []string{ } var longMonthNames = []string{ - "---", "January", "February", "March", @@ -841,8 +839,10 @@ func parse(layout, value string, defaultLocation, local *Location) (Time, error) year, err = atoi(p) case stdMonth: month, value, err = lookup(shortMonthNames, value) + month++ case stdLongMonth: month, value, err = lookup(longMonthNames, value) + month++ case stdNumMonth, stdZeroMonth: month, value, err = getnum(value, std == stdZeroMonth) if month <= 0 || 12 < month { diff --git a/src/time/format_test.go b/src/time/format_test.go index 710de594a0106..6d27f468c7b78 100644 --- a/src/time/format_test.go +++ b/src/time/format_test.go @@ -465,6 +465,9 @@ var parseErrorTests = []ParseErrorTest{ {RFC3339, "2006-01-02T15:04:05Z_abc", `parsing time "2006-01-02T15:04:05Z_abc": extra text: _abc`}, // invalid second followed by optional fractional seconds {RFC3339, "2010-02-04T21:00:67.012345678-08:00", "second out of range"}, + // issue 21113 + {"_2 Jan 06 15:04 MST", "4 --- 00 00:00 GMT", "cannot parse"}, + {"_2 January 06 15:04 MST", "4 --- 00 00:00 GMT", "cannot parse"}, } func TestParseErrors(t *testing.T) {