]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1] net/mail: more liberal parsing of Date headers.
authorBill Thiede <couchmoney@gmail.com>
Wed, 13 Jun 2012 20:24:19 +0000 (16:24 -0400)
committerDavid Symonds <dsymonds@golang.org>
Wed, 13 Jun 2012 20:24:19 +0000 (16:24 -0400)
««« backport e995a1bfe589
net/mail: more liberal parsing of Date headers.
Fixes #3639.

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/6243045

»»»

src/pkg/net/mail/message.go
src/pkg/net/mail/message_test.go

index 0917bbedf1b3eb4e6dda4c6f0220dc609524d267..b610ccf3f048e16910c93ead22bfe566f4190e92 100644 (file)
@@ -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 {
index 671ff2efacbee5674b496ef510883ba27ceff649..fd17eb414a7370636c4d6ce769da6fd324b56659 100644 (file)
@@ -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{