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


Commits:
b2a81f5b by Mark Sapiro at 2021-07-10T17:22:45-07:00
Recode Subjects in list's cset during prefixing.

- - - - -
0a9d9aa6 by Mark Sapiro at 2021-07-11T00:57:35+00:00
Merge branch 'prefix' into 'master'

Recode Subjects in list's cset during prefixing.

Closes #923

See merge request mailman/mailman!890
- - - - -


3 changed files:

- src/mailman/docs/NEWS.rst
- src/mailman/handlers/subject_prefix.py
- src/mailman/handlers/tests/test_subject_prefix.py


Changes:

=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -85,6 +85,9 @@ Bugs
   (Closes #922)
 * The nntp runner no longer folds long headers in newsgroup posts.  (Closes
   #919)
+* RFC 2047 encoded subject headers will now be recoded in the character set of
+  the list's preferred_language during subject prefixing if possible.  (Closes
+  #923)
 
 Command line
 ------------


=====================================
src/mailman/handlers/subject_prefix.py
=====================================
@@ -81,7 +81,10 @@ def all_same_charset(mlist, msgdata, subject, prefix, 
prefix_pattern, ws):
                 # The charset value is unknown.
                 return None
         if charset != list_charset:
-            return None
+            try:
+                chunks[-1].encode(list_charset)
+            except UnicodeEncodeError:
+                return None
     subject_text = EMPTYSTRING.join(chunks)
     # At this point, the subject may become null if someone posted mail
     # with "Subject: [subject prefix]".


=====================================
src/mailman/handlers/tests/test_subject_prefix.py
=====================================
@@ -19,6 +19,7 @@
 
 import unittest
 
+from email.header import decode_header
 from mailman.app.lifecycle import create_list
 from mailman.config import config
 from mailman.email.message import Message
@@ -206,7 +207,7 @@ class TestSubjectPrefix(unittest.TestCase):
         self._process(self._mlist, msg, {})
         subject = msg['subject']
         self.assertEqual(subject.encode(),
-                         '=?iso-8859-1?q?=5BTest=5D_?= Plain text')
+                         '=?iso-8859-1?q?=5BTest=5D_Plain_text?=')
 
     def test_unknown_encoded_subject(self):
         msg = Message()
@@ -215,3 +216,30 @@ class TestSubjectPrefix(unittest.TestCase):
         subject = msg['subject']
         self.assertEqual(str(subject),
                          '[Test]  Non-ascii subject - fran�ais')
+
+    def test_encoded_subject_recoded_to_list_cset(self):
+        # Test that encoded subject is recoded to cset of list's preferred
+        # language if possible.
+        msg = Message()
+        msg['Subject'] = '=?gb2312?b?1tDOxA==?='
+        old_charset = self._mlist.preferred_language.charset
+        self._mlist.preferred_language.charset = 'utf-8'
+        self._process(self._mlist, msg, {})
+        self._mlist.preferred_language.charset = old_charset
+        decoded = decode_header(msg['Subject'])
+        self.assertEqual(decoded,
+                         [(b'[Test] \xe4\xb8\xad\xe6\x96\x87', 'utf-8')])
+
+    def test_encoded_subject_not_recoded_to_list_cset(self):
+        # Test when encoded subject can't be recoded to cset of list's
+        # preferred language.
+        msg = Message()
+        msg['Subject'] = '=?gb2312?b?1tDOxA==?='
+        old_charset = self._mlist.preferred_language.charset
+        self._mlist.preferred_language.charset = 'us-ascii'
+        self._process(self._mlist, msg, {})
+        self._mlist.preferred_language.charset = old_charset
+        decoded = decode_header(msg['Subject'])
+        self.assertEqual(decoded,
+                         [(b'[Test] ', 'us-ascii'),
+                          (b'\xd6\xd0\xce\xc4', 'eucgb2312_cn')])



View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/a256914ef6fc0768c715deedf2d4a3ee5d223765...0a9d9aa67471ec39565ddeef7060846579cb7fb9

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/a256914ef6fc0768c715deedf2d4a3ee5d223765...0a9d9aa67471ec39565ddeef7060846579cb7fb9
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