Commit 63639dd2 authored by David Symonds's avatar David Symonds

mail: decode RFC 2047-encoded words, not phrases.

R=rsc, r, bradfitz
CC=golang-dev
https://golang.org/cl/4590047
parent 1fddbab7
...@@ -330,6 +330,12 @@ func (p *addrParser) consumePhrase() (phrase string, err os.Error) { ...@@ -330,6 +330,12 @@ func (p *addrParser) consumePhrase() (phrase string, err os.Error) {
// atom // atom
word, err = p.consumeAtom(false) word, err = p.consumeAtom(false)
} }
// RFC 2047 encoded-word starts with =?, ends with ?=, and has two other ?s.
if err == nil && strings.HasPrefix(word, "=?") && strings.HasSuffix(word, "?=") && strings.Count(word, "?") == 4 {
word, err = decodeRFC2047Word(word)
}
if err != nil { if err != nil {
break break
} }
...@@ -342,11 +348,6 @@ func (p *addrParser) consumePhrase() (phrase string, err os.Error) { ...@@ -342,11 +348,6 @@ func (p *addrParser) consumePhrase() (phrase string, err os.Error) {
return "", os.ErrorString("mail: missing word in phrase") return "", os.ErrorString("mail: missing word in phrase")
} }
phrase = strings.Join(words, " ") phrase = strings.Join(words, " ")
// RFC 2047 encoded-word starts with =?, ends with ?=, and has two other ?s.
if strings.HasPrefix(phrase, "=?") && strings.HasSuffix(phrase, "?=") && strings.Count(phrase, "?") == 4 {
return decodeRFC2047Word(phrase)
}
return phrase, nil return phrase, nil
} }
......
...@@ -207,6 +207,16 @@ func TestAddressParsing(t *testing.T) { ...@@ -207,6 +207,16 @@ func TestAddressParsing(t *testing.T) {
}, },
}, },
}, },
// RFC 2047, Section 8.
{
`=?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be>`,
[]*Address{
&Address{
Name: `André Pirard`,
Address: "PIRARD@vm1.ulg.ac.be",
},
},
},
} }
for _, test := range tests { for _, test := range tests {
addrs, err := newAddrParser(test.addrsStr).parseAddressList() addrs, err := newAddrParser(test.addrsStr).parseAddressList()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment