From 42137704fca158f14c4aebff61b54ebeae788a4a Mon Sep 17 00:00:00 2001 From: 0xc0d Date: Tue, 22 Nov 2022 00:14:11 +0000 Subject: [PATCH] net/mail: fix EOF error while reading header-only message 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 Auto-Submit: Ian Lance Taylor TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Run-TryBot: Ian Lance Taylor --- src/net/mail/message.go | 2 +- src/net/mail/message_test.go | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/net/mail/message.go b/src/net/mail/message.go index 6268c08f47..a416007fdb 100644 --- a/src/net/mail/message.go +++ b/src/net/mail/message.go @@ -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 } diff --git a/src/net/mail/message_test.go b/src/net/mail/message_test.go index 61e50ccfd5..4b581ccc73 100644 --- a/src/net/mail/message_test.go +++ b/src/net/mail/message_test.go @@ -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) { -- 2.50.0