]> Cypherpunks repositories - gostls13.git/commitdiff
net/mail: avoid panic in (*Address).String for malformed addresses.
authorDavid Symonds <dsymonds@golang.org>
Tue, 11 Aug 2015 05:05:12 +0000 (15:05 +1000)
committerDavid Symonds <dsymonds@golang.org>
Tue, 11 Aug 2015 05:07:30 +0000 (05:07 +0000)
Fixes #12098.

Change-Id: I190586484cd34856dccfafaba60eff0197c7dc20
Reviewed-on: https://go-review.googlesource.com/13500
Reviewed-by: Rob Pike <r@golang.org>
src/net/mail/message.go
src/net/mail/message_test.go

index 8ddb313b47a73ccb33fbfa898d59796ca007f9f4..8a89f9b0c077f4fa322421937bba9f11a981adce 100644 (file)
@@ -171,7 +171,14 @@ func (a *Address) String() string {
 
        // Format address local@domain
        at := strings.LastIndex(a.Address, "@")
-       local, domain := a.Address[:at], a.Address[at+1:]
+       var local, domain string
+       if at < 0 {
+               // This is a malformed address ("@" is required in addr-spec);
+               // treat the whole address as local-part.
+               local = a.Address
+       } else {
+               local, domain := a.Address[:at], a.Address[at+1:]
+       }
 
        // Add quotes if needed
        // TODO: rendering quoted local part and rendering printable name
index ffe9af9bf639ac87b077e0d2d6943f245fca648c..c6b412c181fe513eb53df961bc336bc489abe2b8 100644 (file)
@@ -483,6 +483,14 @@ func TestAddressFormatting(t *testing.T) {
                        &Address{Name: "Böb Jacöb", Address: "bob@example.com"},
                        `=?utf-8?q?B=C3=B6b_Jac=C3=B6b?= <bob@example.com>`,
                },
+               { // https://golang.org/issue/12098
+                       &Address{Name: "Rob", Address: ""},
+                       `"Rob" <>`,
+               },
+               { // https://golang.org/issue/12098
+                       &Address{Name: "Rob", Address: "@"},
+                       `"Rob" <@>`,
+               },
        }
        for _, test := range tests {
                s := test.addr.String()