diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-08-14 13:29:07 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-08-28 20:05:42 +0000 |
commit | 1fa328f8fbb6f4fae494b00c7c1a6fe1c288af79 (patch) | |
tree | 675095d28b08e0359a57627ccb647ac2acbaaaf4 | |
parent | 19c8546cd9cd53da0f4604d20f47714554fed051 (diff) | |
download | go-1fa328f8fbb6f4fae494b00c7c1a6fe1c288af79.tar.gz go-1fa328f8fbb6f4fae494b00c7c1a6fe1c288af79.zip |
[release-branch.go1.15] net/mail: return error on empty address list
This restores the handling accidentally changed in CL 217377.
Fixes #40804
For #40803
For #36959
Change-Id: If77fbc0c2a1dde4799f760affdfb8dde9bcaf458
Reviewed-on: https://go-review.googlesource.com/c/go/+/248598
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Martà <mvdan@mvdan.cc>
Reviewed-by: Jeremy Fishman <jfishman@cloudflare.com>
(cherry picked from commit 3e636ab9ad31040aff2d484237808907a776cec6)
Reviewed-on: https://go-review.googlesource.com/c/go/+/251167
-rw-r--r-- | src/net/mail/message.go | 13 | ||||
-rw-r--r-- | src/net/mail/message_test.go | 32 |
2 files changed, 41 insertions, 4 deletions
diff --git a/src/net/mail/message.go b/src/net/mail/message.go index 6833cfaec1..09fb794005 100644 --- a/src/net/mail/message.go +++ b/src/net/mail/message.go @@ -279,9 +279,6 @@ func (p *addrParser) parseAddressList() ([]*Address, error) { if p.consume(',') { continue } - if p.empty() { - break - } addrs, err := p.parseAddress(true) if err != nil { @@ -295,9 +292,17 @@ func (p *addrParser) parseAddressList() ([]*Address, error) { if p.empty() { break } - if !p.consume(',') { + if p.peek() != ',' { return nil, errors.New("mail: expected comma") } + + // Skip empty entries for obs-addr-list. + for p.consume(',') { + p.skipSpace() + } + if p.empty() { + break + } } return list, nil } diff --git a/src/net/mail/message_test.go b/src/net/mail/message_test.go index 75db767547..67e3643aeb 100644 --- a/src/net/mail/message_test.go +++ b/src/net/mail/message_test.go @@ -446,6 +446,19 @@ func TestAddressParsing(t *testing.T) { }, }, { + ` , joe@where.test,,John <jdoe@one.test>,,`, + []*Address{ + { + Name: "", + Address: "joe@where.test", + }, + { + Name: "John", + Address: "jdoe@one.test", + }, + }, + }, + { `Group1: <addr1@example.com>;, Group 2: addr2@example.com;, John <addr3@example.com>`, []*Address{ { @@ -1067,3 +1080,22 @@ func TestAddressFormattingAndParsing(t *testing.T) { } } } + +func TestEmptyAddress(t *testing.T) { + parsed, err := ParseAddress("") + if parsed != nil || err == nil { + t.Errorf(`ParseAddress("") = %v, %v, want nil, error`, parsed, err) + } + list, err := ParseAddressList("") + if len(list) > 0 || err == nil { + t.Errorf(`ParseAddressList("") = %v, %v, want nil, error`, list, err) + } + list, err = ParseAddressList(",") + if len(list) > 0 || err == nil { + t.Errorf(`ParseAddressList("") = %v, %v, want nil, error`, list, err) + } + list, err = ParseAddressList("a@b c@d") + if len(list) > 0 || err == nil { + t.Errorf(`ParseAddressList("") = %v, %v, want nil, error`, list, err) + } +} |