summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurélien Bompard2014-11-30 11:23:49 +0100
committerAurélien Bompard2014-11-30 11:23:49 +0100
commitb0cb1bc042cf8cd4d18efde8a58711b56efb3713 (patch)
treefde879adac698ef89629a0ffef86aec6c02afeb1
parent3a94916c286c2be8677c601810c3437262b0fa6f (diff)
downloadmailman-b0cb1bc042cf8cd4d18efde8a58711b56efb3713.tar.gz
mailman-b0cb1bc042cf8cd4d18efde8a58711b56efb3713.tar.zst
mailman-b0cb1bc042cf8cd4d18efde8a58711b56efb3713.zip
-rw-r--r--src/mailman/rules/approved.py5
-rw-r--r--src/mailman/rules/tests/test_approved.py31
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)