From: Bill Thiede Date: Wed, 13 Jun 2012 20:24:19 +0000 (-0400) Subject: [release-branch.go1] net/mail: more liberal parsing of Date headers. X-Git-Tag: go1.0.2~55 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c8e2ccdc9c4c8851ea5f7142255280df5b7a5d4a;p=gostls13.git [release-branch.go1] net/mail: more liberal parsing of Date headers. ««« backport e995a1bfe589 net/mail: more liberal parsing of Date headers. Fixes #3639. R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/6243045 »»» --- diff --git a/src/pkg/net/mail/message.go b/src/pkg/net/mail/message.go index 0917bbedf1..b610ccf3f0 100644 --- a/src/pkg/net/mail/message.go +++ b/src/pkg/net/mail/message.go @@ -69,11 +69,12 @@ var dateLayouts []string func init() { // Generate layouts based on RFC 5322, section 3.3. - dows := [...]string{"", "Mon, "} // day-of-week - days := [...]string{"2", "02"} // day = 1*2DIGIT - years := [...]string{"2006", "06"} // year = 4*DIGIT / 2*DIGIT - seconds := [...]string{":05", ""} // second - zones := [...]string{"-0700", "MST"} // zone = (("+" / "-") 4DIGIT) / "GMT" / ... + dows := [...]string{"", "Mon, "} // day-of-week + days := [...]string{"2", "02"} // day = 1*2DIGIT + years := [...]string{"2006", "06"} // year = 4*DIGIT / 2*DIGIT + seconds := [...]string{":05", ""} // second + // "-0700 (MST)" is not in RFC 5322, but is common. + zones := [...]string{"-0700", "MST", "-0700 (MST)"} // zone = (("+" / "-") 4DIGIT) / "GMT" / ... for _, dow := range dows { for _, day := range days { diff --git a/src/pkg/net/mail/message_test.go b/src/pkg/net/mail/message_test.go index 671ff2efac..fd17eb414a 100644 --- a/src/pkg/net/mail/message_test.go +++ b/src/pkg/net/mail/message_test.go @@ -95,6 +95,11 @@ func TestDateParsing(t *testing.T) { "21 Nov 97 09:55:06 GMT", time.Date(1997, 11, 21, 9, 55, 6, 0, time.FixedZone("GMT", 0)), }, + // Commonly found format not specified by RFC 5322. + { + "Fri, 21 Nov 1997 09:55:06 -0600 (MDT)", + time.Date(1997, 11, 21, 9, 55, 6, 0, time.FixedZone("", -6*60*60)), + }, } for _, test := range tests { hdr := Header{