diff options
author | Russ Cox <rsc@golang.org> | 2014-09-16 17:40:33 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-09-16 17:40:33 -0400 |
commit | 695376b3bde5d12818b2e8c6ecedafb9ae8ea15b (patch) | |
tree | df6d4ff3fbf70d367c938525a7dbe5f13d561470 /src/net | |
parent | 520597830a086deec278c98b5782713ca40b661e (diff) | |
download | go-695376b3bde5d12818b2e8c6ecedafb9ae8ea15b.tar.gz |
net/mail: allow us-ascii encoding
Fixes issue 6611.
LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://codereview.appspot.com/14990045
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/mail/message.go | 13 | ||||
-rw-r--r-- | src/net/mail/message_test.go | 10 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/net/mail/message.go b/src/net/mail/message.go index ba0778caa..19aa888d8 100644 --- a/src/net/mail/message.go +++ b/src/net/mail/message.go @@ -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 { diff --git a/src/net/mail/message_test.go b/src/net/mail/message_test.go index eb9c8cbdc..6ba48be04 100644 --- a/src/net/mail/message_test.go +++ b/src/net/mail/message_test.go @@ -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>`, |