]> Cypherpunks repositories - gostls13.git/commitdiff
net/mail: fix EOF error while reading header-only message
author0xc0d <aliasgharjosie@gmail.com>
Tue, 22 Nov 2022 00:14:11 +0000 (00:14 +0000)
committerGopher Robot <gobot@golang.org>
Fri, 24 Mar 2023 19:35:39 +0000 (19:35 +0000)
Check if any header found in case of EOF to recognize header-only
messages and if so, return a Message with the found headers
and a body from the reader which is already empty.

Fixes #33823.

Change-Id: I2f0396b08e9be4e6c89c212ce62b9c87b5f63123
GitHub-Last-Rev: 356a9420837bf7e247247f7dc7c8a1d218684aeb
GitHub-Pull-Request: golang/go#47898
Reviewed-on: https://go-review.googlesource.com/c/go/+/344269
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>

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

index 6268c08f47dd07591d535baf837610ef77bb1c9b..a416007fdb6eabd0c7affe0192ae929c7abbc627 100644 (file)
@@ -54,7 +54,7 @@ func ReadMessage(r io.Reader) (msg *Message, err error) {
        tp := textproto.NewReader(bufio.NewReader(r))
 
        hdr, err := tp.ReadMIMEHeader()
-       if err != nil {
+       if err != nil && (err != io.EOF || len(hdr) == 0) {
                return nil, err
        }
 
index 61e50ccfd5c8447816b73d74aede200703b201b1..4b581ccc733ae97f018d81af5efee2facbc6dcdb 100644 (file)
@@ -39,6 +39,19 @@ So, "Hello".
                },
                body: "This is a message just to say hello.\nSo, \"Hello\".\n",
        },
+       {
+               // RFC 5965, Appendix B.1, a part of the multipart message (a header-only sub message)
+               in: `Feedback-Type: abuse
+User-Agent: SomeGenerator/1.0
+Version: 1
+`,
+               header: Header{
+                       "Feedback-Type": []string{"abuse"},
+                       "User-Agent":    []string{"SomeGenerator/1.0"},
+                       "Version":       []string{"1"},
+               },
+               body: "",
+       },
 }
 
 func TestParsing(t *testing.T) {