From 555453bc1ae56335e69f009fd16c274733485e04 Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Tue, 22 Nov 2022 19:08:03 +0100 Subject: [PATCH] GODT-2142: Also permit split by comma in References header --- internal/user/smtp.go | 6 ++--- pkg/message/parser.go | 9 ++++---- pkg/message/parser_test.go | 17 +++++++++++++- pkg/message/testdata/references-comma.eml | 27 +++++++++++++++++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 pkg/message/testdata/references-comma.eml diff --git a/internal/user/smtp.go b/internal/user/smtp.go index 047e6415..54d19b20 100644 --- a/internal/user/smtp.go +++ b/internal/user/smtp.go @@ -163,8 +163,7 @@ func sendWithKey( //nolint:funlen authAddrID string, addrMode vault.AddressMode, settings liteapi.MailSettings, - userKR *crypto.KeyRing, - addrKR *crypto.KeyRing, + userKR, addrKR *crypto.KeyRing, emails []string, from string, to []string, @@ -177,7 +176,8 @@ func sendWithKey( //nolint:funlen var decBody string - switch message.MIMEType { //nolint:exhaustive + // nolint:exhaustive + switch message.MIMEType { case rfc822.TextHTML: decBody = string(message.RichBody) diff --git a/pkg/message/parser.go b/pkg/message/parser.go index 85d51703..929ca375 100644 --- a/pkg/message/parser.go +++ b/pkg/message/parser.go @@ -30,7 +30,6 @@ import ( "github.com/ProtonMail/go-rfc5322" "github.com/ProtonMail/proton-bridge/v2/pkg/message/parser" pmmime "github.com/ProtonMail/proton-bridge/v2/pkg/mime" - "github.com/bradenaw/juniper/xslices" "github.com/emersion/go-message" "github.com/jaytaylor/html2text" "github.com/pkg/errors" @@ -497,9 +496,11 @@ func parseMessageHeader(h message.Header) (Message, error) { //nolint:funlen m.InReplyTo = regexp.MustCompile("<(.*)>").ReplaceAllString(fields.Value(), "$1") case "references": - m.References = append(m.References, xslices.Map(strings.Fields(fields.Value()), func(ref string) string { - return strings.Trim(ref, "<>") - })...) + for _, ref := range strings.Fields(fields.Value()) { + for _, ref := range strings.Split(ref, ",") { + m.References = append(m.References, strings.Trim(ref, "<>")) + } + } } } diff --git a/pkg/message/parser_test.go b/pkg/message/parser_test.go index eaf833be..e2958db1 100644 --- a/pkg/message/parser_test.go +++ b/pkg/message/parser_test.go @@ -587,7 +587,22 @@ func TestParseMessageReferences(t *testing.T) { m, err := Parse(f) require.NoError(t, err) - assert.Len(t, m.References, 2) + assert.ElementsMatch(t, m.References, []string{ + `PMZV4VZMRM@something.com`, + `OEUOEUEOUOUOU770B9QNZWFVGM@protonmail.ch`, + }) +} + +func TestParseMessageReferencesComma(t *testing.T) { + f := getFileReader("references-comma.eml") + + m, err := Parse(f) + require.NoError(t, err) + + assert.ElementsMatch(t, m.References, []string{ + `PMZV4VZMRM@something.com`, + `OEUOEUEOUOUOU770B9QNZWFVGM@protonmail.ch`, + }) } func TestParsePanic(t *testing.T) { diff --git a/pkg/message/testdata/references-comma.eml b/pkg/message/testdata/references-comma.eml new file mode 100644 index 00000000..985110a2 --- /dev/null +++ b/pkg/message/testdata/references-comma.eml @@ -0,0 +1,27 @@ +Content-Type: multipart/mixed; + boundary=987c7102dcaf02d01860ce777b465f86d39ec16a3b4e12605eb6b0eb200a +X-Original-To: someone@protonmail.com +Delivered-To: someone@protonmail.com +Date: Sun, 04 Aug 2019 13:03:26 +0000 +From: ProtonVPN +Reply-To: ProtonVPN +To: someone +Message-Id: +In-Reply-To: +References: , +Subject: Some test subject +Mime-Version: 1.0 + +--987c7102dcaf02d01860ce777b465f86d39ec16a3b4e12605eb6b0eb200a +Content-Transfer-Encoding: quoted-printable +Content-Type: text/html; charset=utf-8 + + + + + test test test + + + +--987c7102dcaf02d01860ce777b465f86d39ec16a3b4e12605eb6b0eb200a--