diff options
| author | Aurélien Bompard | 2014-11-30 11:23:49 +0100 |
|---|---|---|
| committer | Aurélien Bompard | 2014-11-30 11:23:49 +0100 |
| commit | b0cb1bc042cf8cd4d18efde8a58711b56efb3713 (patch) | |
| tree | fde879adac698ef89629a0ffef86aec6c02afeb1 /src | |
| parent | 3a94916c286c2be8677c601810c3437262b0fa6f (diff) | |
| download | mailman-b0cb1bc042cf8cd4d18efde8a58711b56efb3713.tar.gz mailman-b0cb1bc042cf8cd4d18efde8a58711b56efb3713.tar.zst mailman-b0cb1bc042cf8cd4d18efde8a58711b56efb3713.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/rules/approved.py | 5 | ||||
| -rw-r--r-- | src/mailman/rules/tests/test_approved.py | 31 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/mailman/rules/approved.py b/src/mailman/rules/approved.py index 2839ffef4..73995c7ee 100644 --- a/src/mailman/rules/approved.py +++ b/src/mailman/rules/approved.py @@ -73,7 +73,10 @@ class Approved: stripped = False for part in typed_subpart_iterator(msg, 'text', 'plain'): break - payload = part.get_payload(decode=True) + if part is None: + payload = None + else: + payload = part.get_payload(decode=True) if payload is not None: charset = part.get_content_charset('us-ascii') payload = payload.decode(charset, 'replace') diff --git a/src/mailman/rules/tests/test_approved.py b/src/mailman/rules/tests/test_approved.py index e7f122410..e0927bfc9 100644 --- a/src/mailman/rules/tests/test_approved.py +++ b/src/mailman/rules/tests/test_approved.py @@ -491,3 +491,34 @@ deprecated = roundup_plaintext self.assertFalse(result) self.assertEqual(self._mlist.moderator_password, b'{plaintext}super secret') + + +class TestApprovedNoPlainText(unittest.TestCase): + """Test the approved handler with HTML-only messages.""" + + layer = ConfigLayer + + def setUp(self): + self._mlist = create_list('test@example.com') + self._rule = approved.Approved() + + def test_noplaintext(self): + # When the message body only contains HTML, the rule should not throw + # AttributeError: 'NoneType' object has no attribute 'get_payload' + # LP: #1158721 + msg = mfs("""\ +From: anne@example.com +To: test@example.com +Subject: HTML only email +Message-ID: <ant> +MIME-Version: 1.0 +Content-Type: text/html; charset="Windows-1251" +Content-Transfer-Encoding: 7bit + +<HTML> +<BODY> +<P>This message contains only HTML, no plain/text part</P> +</BODY></HTML> +""") + result = self._rule.check(self._mlist, msg, {}) + self.assertFalse(result) |
