summaryrefslogtreecommitdiff
path: root/src/mailman/rules
diff options
context:
space:
mode:
authorBarry Warsaw2014-12-03 21:08:42 -0500
committerBarry Warsaw2014-12-03 21:08:42 -0500
commit8dfd0a2e2d37f282b71df8e7c115d4fefa106d7b (patch)
tree37b7cf896a79177c0f1ab1384939f36c44a39a58 /src/mailman/rules
parent3a94916c286c2be8677c601810c3437262b0fa6f (diff)
parentb0cb1bc042cf8cd4d18efde8a58711b56efb3713 (diff)
downloadmailman-8dfd0a2e2d37f282b71df8e7c115d4fefa106d7b.tar.gz
mailman-8dfd0a2e2d37f282b71df8e7c115d4fefa106d7b.tar.zst
mailman-8dfd0a2e2d37f282b71df8e7c115d4fefa106d7b.zip
Diffstat (limited to 'src/mailman/rules')
-rw-r--r--src/mailman/rules/approved.py3
-rw-r--r--src/mailman/rules/tests/test_approved.py32
2 files changed, 34 insertions, 1 deletions
diff --git a/src/mailman/rules/approved.py b/src/mailman/rules/approved.py
index 2839ffef4..3b40d5dc9 100644
--- a/src/mailman/rules/approved.py
+++ b/src/mailman/rules/approved.py
@@ -71,9 +71,10 @@ class Approved:
# Find the first text/plain part in the message
part = None
stripped = False
+ payload = None
for part in typed_subpart_iterator(msg, 'text', 'plain'):
+ payload = part.get_payload(decode=True)
break
- 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..9976d4eff 100644
--- a/src/mailman/rules/tests/test_approved.py
+++ b/src/mailman/rules/tests/test_approved.py
@@ -491,3 +491,35 @@ deprecated = roundup_plaintext
self.assertFalse(result)
self.assertEqual(self._mlist.moderator_password,
b'{plaintext}super secret')
+
+
+class TestApprovedNoTextPlainPart(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_no_text_plain_part(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)