Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core


Commits:
2e1dca2e by Mark Sapiro at 2023-03-27T00:48:43+00:00
Decode encoded message bodies in administrivia rule.

Fixes #1072

* Decode encoded message bodies in administrivia rule.

- - - - -
79a49b8f by Mark Sapiro at 2023-03-27T00:48:43+00:00
Merge branch 'administrivia' into 'master'

Decode encoded message bodies in administrivia rule.

Closes #1072

See merge request mailman/mailman!1110

Merged-by: Mark Sapiro <m...@msapiro.net>

Reviewed-by: 
- - - - -


3 changed files:

- src/mailman/docs/NEWS.rst
- src/mailman/rules/administrivia.py
- src/mailman/rules/tests/test_administrivia.py


Changes:

=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -42,6 +42,8 @@ Bugs fixed
 * Content filtering will no longer add its report to a non-mixed multipart
   message but will wrap the message and add the report to the wrapper.
   (Closes #1071)
+* The administrivia rule will now decode encoded message bodies.
+  (Closes #1072)
 
 .. _news-3.3.8:
 


=====================================
src/mailman/rules/administrivia.py
=====================================
@@ -66,7 +66,9 @@ class Administrivia:
         # Search only the first text/plain subpart of the message.  There's
         # really no good way to find email commands in any other content type.
         for part in typed_subpart_iterator(msg, 'text', 'plain'):
-            payload = part.get_payload()
+            payload = part.get_payload(decode=True)
+            payload = payload.decode(part.get_content_charset('utf-8'),
+                                     errors='replace')
             lines = payload.splitlines()
             # Count lines without using enumerate() because blank lines in the
             # payload don't count against the maximum examined.


=====================================
src/mailman/rules/tests/test_administrivia.py
=====================================
@@ -49,3 +49,21 @@ A message body.
         self.assertTrue(result)
         self.assertEqual(msgdata['moderation_reasons'],
                          ['Message contains administrivia'])
+
+    def test_encoded_body(self):
+        # Test that encoded body is decoded.
+        msg = mfs("""\
+From: a...@example.com
+To: t...@example.com
+Subject: An innocuous subject
+Message-ID: <ant>
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+MIMI-Version: 1.0
+
+SSB3YW50IG9mZiB0aGlzIGxpc3QKdW5zdWJzY3JpYmUK
+""")
+        rule = administrivia.Administrivia()
+        msgdata = {}
+        result = rule.check(self._mlist, msg, msgdata)
+        self.assertTrue(result)



View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/cd53868b09821e9560e6bf3ab5ecc92eb1429eea...79a49b8f120c9f700892d234a31269543d0f9b1f

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/cd53868b09821e9560e6bf3ab5ecc92eb1429eea...79a49b8f120c9f700892d234a31269543d0f9b1f
You're receiving this email because of your account on gitlab.com.


_______________________________________________
Mailman-checkins mailing list -- mailman-checkins@python.org
To unsubscribe send an email to mailman-checkins-le...@python.org
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: arch...@jab.org

Reply via email to