diff options
| author | Aurélien Bompard <aurelien@bompard.org> | 2013-10-15 09:06:49 +0200 |
|---|---|---|
| committer | Aurélien Bompard <aurelien@bompard.org> | 2013-10-15 09:06:49 +0200 |
| commit | e323e816dd5b45bd27d50aaf89c1a3aedcaa7453 (patch) | |
| tree | e1e034807d6f951d41faf2a325ffd776a7db65c0 | |
| parent | 2a02024aa2d762314f1f4ead24b350fb0575b7e8 (diff) | |
| download | kittystore-e323e816dd5b45bd27d50aaf89c1a3aedcaa7453.tar.gz kittystore-e323e816dd5b45bd27d50aaf89c1a3aedcaa7453.tar.xz kittystore-e323e816dd5b45bd27d50aaf89c1a3aedcaa7453.zip | |
Protect against badly encoded attachment names
| -rw-r--r-- | kittystore/scrub.py | 2 | ||||
| -rw-r--r-- | kittystore/test/test_scrub.py | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/kittystore/scrub.py b/kittystore/scrub.py index 1481713..40b8c10 100644 --- a/kittystore/scrub.py +++ b/kittystore/scrub.py @@ -238,7 +238,7 @@ class Scrubber(object): # i18n file name is encoded try: filename = oneline(part.get_filename(''), in_unicode=True) - except TypeError: + except (TypeError, UnicodeDecodeError): # Workaround for https://bugs.launchpad.net/mailman/+bug/1060951 # (accented filenames) filename = "attachment.bin" diff --git a/kittystore/test/test_scrub.py b/kittystore/test/test_scrub.py index 3e9c746..76b13d4 100644 --- a/kittystore/test/test_scrub.py +++ b/kittystore/test/test_scrub.py @@ -5,6 +5,7 @@ import unittest import email +from traceback import format_exc from mock import Mock from mailman.email.message import Message @@ -152,6 +153,21 @@ class TestScrubber(unittest.TestCase): u'accented letters : \xe9 \xe8 \xe7 \xe0.\r\nAnd an ' u'attachment with an accented filename\r\n\r\n\r\n\r\n') + def test_attachment_name_badly_encoded(self): + msg = email.message.Message() + msg["From"] = "dummy@example.com" + msg["Message-ID"] = "<dummy>" + msg.set_payload("Dummy content") + msg.add_header('Content-Disposition', 'attachment', filename='non-ascii-\xb8\xb1\xb1\xbe.jpg') + scrubber = Scrubber("testlist@example.com", msg) + try: + contents, attachments = scrubber.scrub() + except UnicodeDecodeError: + print format_exc() + self.fail("Could not decode the filename") + self.assertEqual(attachments, + [(0, 'attachment.bin', 'text/plain', None, 'Dummy content')]) + def test_remove_next_part_from_content(self): with open(get_test_file("pipermail_nextpart.txt")) as email_file: msg = email.message_from_file(email_file, _class=Message) |
