From 10e384f4df72d6beb201a642ccb68454407e6bd2 Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Fri, 3 Jul 2020 09:19:18 +0200 Subject: [PATCH] test: add tests for parsing mime message with bad 2231 filename --- pkg/message/parser_test.go | 38 +++++++++++++++++++ ...ain_octet_attachment_bad_2231_filename.eml | 14 +++++++ ...in_octet_attachment_bad_2231_filename.mime | 18 +++++++++ ...in_octet_attachment_good_2231_filename.eml | 14 +++++++ ...n_octet_attachment_good_2231_filename.mime | 18 +++++++++ 5 files changed, 102 insertions(+) create mode 100644 pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.eml create mode 100644 pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.mime create mode 100644 pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.eml create mode 100644 pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.mime diff --git a/pkg/message/parser_test.go b/pkg/message/parser_test.go index b71d00cc..0826e63e 100644 --- a/pkg/message/parser_test.go +++ b/pkg/message/parser_test.go @@ -271,6 +271,44 @@ func TestParseMessageTextPlainWithOctetAttachment(t *testing.T) { assert.Equal(t, readerToString(atts[0]), "if you are reading this, hi!") } +func TestParseMessageTextPlainWithOctetAttachmentGoodFilename(t *testing.T) { + f := f("text_plain_octet_attachment_good_2231_filename.eml") + defer func() { _ = f.Close() }() + + m, mimeBody, plainContents, atts, err := Parse(f, "", "") + assert.NoError(t, err) + + assert.Equal(t, `"Sender" `, m.Sender.String()) + assert.Equal(t, `"Receiver" `, m.ToList[0].String()) + + assert.Equal(t, "body", m.Body) + assert.Equal(t, s("text_plain_octet_attachment_good_2231_filename.mime"), mimeBody) + assert.Equal(t, "body", plainContents) + + assert.Len(t, atts, 1) + assert.Equal(t, readerToString(atts[0]), "if you are reading this, hi!") + assert.Equal(t, "😁😂.txt", m.Attachments[0].Name) +} + +func TestParseMessageTextPlainWithOctetAttachmentBadFilename(t *testing.T) { + f := f("text_plain_octet_attachment_bad_2231_filename.eml") + defer func() { _ = f.Close() }() + + m, mimeBody, plainContents, atts, err := Parse(f, "", "") + assert.NoError(t, err) + + assert.Equal(t, `"Sender" `, m.Sender.String()) + assert.Equal(t, `"Receiver" `, m.ToList[0].String()) + + assert.Equal(t, "body", m.Body) + assert.Equal(t, s("text_plain_octet_attachment_bad_2231_filename.mime"), mimeBody) + assert.Equal(t, "body", plainContents) + + assert.Len(t, atts, 1) + assert.Equal(t, readerToString(atts[0]), "if you are reading this, hi!") + assert.Equal(t, "attachment.bin", m.Attachments[0].Name) +} + func TestParseMessageTextPlainWithPlainAttachment(t *testing.T) { f := f("text_plain_plain_attachment.eml") defer func() { _ = f.Close() }() diff --git a/pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.eml b/pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.eml new file mode 100644 index 00000000..14075c2d --- /dev/null +++ b/pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.eml @@ -0,0 +1,14 @@ +From: Sender +To: Receiver +Content-Type: multipart/mixed; boundary=longrandomstring + +--longrandomstring + +body +--longrandomstring +Content-Type: application/octet-stream +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename*=utf-8'%F0%9F%98%81%F0%9F%98%82.txt + +aWYgeW91IGFyZSByZWFkaW5nIHRoaXMsIGhpIQ== +--longrandomstring-- diff --git a/pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.mime b/pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.mime new file mode 100644 index 00000000..15a1193f --- /dev/null +++ b/pkg/message/testdata/text_plain_octet_attachment_bad_2231_filename.mime @@ -0,0 +1,18 @@ +Content-Type: multipart/mixed; boundary=longrandomstring +From: Sender +To: Receiver + + +This is a multi-part message in MIME format. +--longrandomstring +Content-Transfer-Encoding: quoted-printable + +body +--longrandomstring +Content-Disposition: attachment; filename*=utf-8'%F0%9F%98%81%F0%9F%98%82.txt +Content-Transfer-Encoding: base64 +Content-Type: application/octet-stream + +aWYgeW91IGFyZSByZWFkaW5nIHRoaXMsIGhpIQ== +--longrandomstring-- +. diff --git a/pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.eml b/pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.eml new file mode 100644 index 00000000..44a0d2f6 --- /dev/null +++ b/pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.eml @@ -0,0 +1,14 @@ +From: Sender +To: Receiver +Content-Type: multipart/mixed; boundary=longrandomstring + +--longrandomstring + +body +--longrandomstring +Content-Type: application/octet-stream +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename*=utf-8''%F0%9F%98%81%F0%9F%98%82.txt + +aWYgeW91IGFyZSByZWFkaW5nIHRoaXMsIGhpIQ== +--longrandomstring-- diff --git a/pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.mime b/pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.mime new file mode 100644 index 00000000..bec75a51 --- /dev/null +++ b/pkg/message/testdata/text_plain_octet_attachment_good_2231_filename.mime @@ -0,0 +1,18 @@ +Content-Type: multipart/mixed; boundary=longrandomstring +From: Sender +To: Receiver + + +This is a multi-part message in MIME format. +--longrandomstring +Content-Transfer-Encoding: quoted-printable + +body +--longrandomstring +Content-Disposition: attachment; filename*=utf-8''%F0%9F%98%81%F0%9F%98%82.txt +Content-Transfer-Encoding: base64 +Content-Type: application/octet-stream + +aWYgeW91IGFyZSByZWFkaW5nIHRoaXMsIGhpIQ== +--longrandomstring-- +.