]> Cypherpunks repositories - gostls13.git/commitdiff
net/mail: allow us-ascii encoding
authorRuss Cox <rsc@golang.org>
Tue, 16 Sep 2014 21:40:33 +0000 (17:40 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 16 Sep 2014 21:40:33 +0000 (17:40 -0400)
Fixes #6611.

LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://golang.org/cl/14990045

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

index ba0778caa73af448b960f71557b239f9f2debfd4..19aa888d872e3beeedba0b04ca46be225cc7522d 100644 (file)
@@ -28,6 +28,7 @@ import (
        "strconv"
        "strings"
        "time"
+       "unicode"
 )
 
 var debug = debugT(false)
@@ -445,7 +446,7 @@ func decodeRFC2047Word(s string) (string, error) {
                return "", errors.New("address not RFC 2047 encoded")
        }
        charset, enc := strings.ToLower(fields[1]), strings.ToLower(fields[2])
-       if charset != "iso-8859-1" && charset != "utf-8" {
+       if charset != "us-ascii" && charset != "iso-8859-1" && charset != "utf-8" {
                return "", fmt.Errorf("charset not supported: %q", charset)
        }
 
@@ -466,6 +467,16 @@ func decodeRFC2047Word(s string) (string, error) {
        }
 
        switch charset {
+       case "us-ascii":
+               b := new(bytes.Buffer)
+               for _, c := range dec {
+                       if c >= 0x80 {
+                               b.WriteRune(unicode.ReplacementChar)
+                       } else {
+                               b.WriteRune(rune(c))
+                       }
+               }
+               return b.String(), nil
        case "iso-8859-1":
                b := new(bytes.Buffer)
                for _, c := range dec {
index eb9c8cbdc9b61ccc09aabea0d7b2586c50067a4c..6ba48be04faf2d658083f400551a054b8ed9a720 100644 (file)
@@ -194,6 +194,16 @@ func TestAddressParsing(t *testing.T) {
                                },
                        },
                },
+               // RFC 2047 "Q"-encoded US-ASCII address. Dumb but legal.
+               {
+                       `=?us-ascii?q?J=6Frg_Doe?= <joerg@example.com>`,
+                       []*Address{
+                               {
+                                       Name:    `Jorg Doe`,
+                                       Address: "joerg@example.com",
+                               },
+                       },
+               },
                // RFC 2047 "Q"-encoded UTF-8 address.
                {
                        `=?utf-8?q?J=C3=B6rg_Doe?= <joerg@example.com>`,