]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.15] net/mail: return error on empty address list
authorIan Lance Taylor <iant@golang.org>
Fri, 14 Aug 2020 20:29:07 +0000 (13:29 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 28 Aug 2020 20:05:42 +0000 (20:05 +0000)
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

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

index 6833cfaec11c1803dda89b5a8a68663cd9816764..09fb794005a9b06b18b2063417364cc567b82cea 100644 (file)
@@ -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
 }
index 75db767547334b9179a93790a2aeff859e0b73f5..67e3643aeb774cfb099fcfcba189c991a702ad57 100644 (file)
@@ -445,6 +445,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)
+       }
+}