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 -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]