mirror of
https://github.com/golang/go
synced 2024-11-25 11:07:59 -07:00
mail: decode RFC 2047-encoded words, not phrases.
R=rsc, r, bradfitz CC=golang-dev https://golang.org/cl/4590047
This commit is contained in:
parent
1fddbab736
commit
63639dd237
@ -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) {
|
|||||||
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) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
// 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()
|
||||||
|
Loading…
Reference in New Issue
Block a user