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-- +.