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