summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py2
-rw-r--r--service/test/unit/adapter/mailstore/test_leap_mailstore.py19
2 files changed, 20 insertions, 1 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py
index 5637e763..1fce388d 100644
--- a/service/pixelated/adapter/mailstore/leap_mailstore.py
+++ b/service/pixelated/adapter/mailstore/leap_mailstore.py
@@ -190,7 +190,7 @@ class LeapMail(Mail):
def _extract_filename(content_disposition):
- match = re.compile('.*name=\"(.*)\".*').search(content_disposition)
+ match = re.compile('.*name=\"?(.*[^\"\'])').search(content_disposition)
filename = ''
if match:
filename = match.group(1)
diff --git a/service/test/unit/adapter/mailstore/test_leap_mailstore.py b/service/test/unit/adapter/mailstore/test_leap_mailstore.py
index b5b6a742..a2f2d935 100644
--- a/service/test/unit/adapter/mailstore/test_leap_mailstore.py
+++ b/service/test/unit/adapter/mailstore/test_leap_mailstore.py
@@ -258,6 +258,25 @@ class TestLeapMailStore(TestCase):
expected = [{'ident': self._cdoc_phash_from_message(mocked_message, 2), 'name': 'filename.txt', 'encoding': 'base64'}]
self.assertEqual(expected, message.as_dict()['attachments'])
+ def test_extract_attachment_filename_with_or_without_quotes(self):
+ input_mail = MIMEMultipart()
+ input_mail.attach(MIMEText(u'a utf8 message', _charset='utf-8'))
+
+ attachment_without_quotes = MIMEApplication('pretend to be an attachment from apple mail')
+ attachment_without_quotes.add_header('Content-Disposition', 'u\'attachment;\n\tfilename=batatinha.rtf')
+ input_mail.attach(attachment_without_quotes)
+
+ attachment_with_quotes = MIMEApplication('pretend to be an attachment from thunderbird')
+ attachment_with_quotes.add_header('Content-Disposition', 'u\'attachment; filename="receipt.pdf"')
+ input_mail.attach(attachment_with_quotes)
+
+ message = self._add_create_mail_mocks_to_soledad(input_mail)
+ store = LeapMailStore(self.soledad)
+ attachment_info = store._extract_attachment_info_from(message)
+
+ self.assertEqual('batatinha.rtf', attachment_info[0].name)
+ self.assertEqual('receipt.pdf', attachment_info[1].name)
+
@defer.inlineCallbacks
def test_add_mail_with_special_chars(self):
input_mail = MIMEText(u'a utf8 message', _charset='utf-8')