Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core
Commits:
b8d9fec1 by Mark Sapiro at 2018-01-19T16:02:27-08:00
Caught and handled a LookupError in subject prefixing.
Added a test for the above.
Fixed the test for blank subject_prefix which erroneously set _fasttrack.
- - - - -
8509f565 by Mark Sapiro at 2018-01-19T16:25:55-08:00
Require SQLAlchemy < 1.2 because of a test failure.
- - - - -
8a87a59c by Mark Sapiro at 2018-01-22T20:19:40+00:00
Merge branch 'prefix' into 'master'
Caught and handled a LookupError in subject prefixing.
Closes #445
See merge request mailman/mailman!354
- - - - -
4 changed files:
- setup.py
- src/mailman/docs/NEWS.rst
- src/mailman/handlers/subject_prefix.py
- src/mailman/handlers/tests/test_subject_prefix.py
Changes:
=====================================
setup.py
=====================================
--- a/setup.py
+++ b/setup.py
@@ -116,7 +116,7 @@ case second `m'. Any other spelling is incorrect.""",
'lazr.config',
'passlib',
'requests',
- 'sqlalchemy',
+ 'sqlalchemy<1.2',
'zope.component',
'zope.configuration',
'zope.event',
=====================================
src/mailman/docs/NEWS.rst
=====================================
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -52,6 +52,8 @@ Bugs
* A new SQLAlchemy column type ``SAUnicodeXL`` has been implemented to support
large columns in MySQL and is used for the ``value`` column of the
``pendedkeyvalue`` table. (Closes #385)
+* Messages with ``Subject`` headers encoded in an unknown character set no
+ longer throw ``LookupError`` in subject prefixing. (Closes #445)
Command line
------------
=====================================
src/mailman/handlers/subject_prefix.py
=====================================
--- a/src/mailman/handlers/subject_prefix.py
+++ b/src/mailman/handlers/subject_prefix.py
@@ -72,7 +72,11 @@ def all_same_charset(mlist, msgdata, subject, prefix,
prefix_pattern, ws):
if isinstance(chunk, str):
chunks.append(chunk)
else:
- chunks.append(chunk.decode(charset))
+ try:
+ chunks.append(chunk.decode(charset))
+ except LookupError as e:
+ # The charset value is unknown.
+ return None
if charset != list_charset:
return None
subject_text = EMPTYSTRING.join(chunks)
@@ -117,7 +121,12 @@ def mixed_charsets(mlist, msgdata, subject, prefix,
prefix_pattern, ws):
if isinstance(chunk_text, str):
first_text = chunk_text
else:
- first_text = chunk_text.decode(chunk_charset)
+ try:
+ first_text = chunk_text.decode(chunk_charset)
+ except LookupError as e:
+ # The chunk_charset is unknown. Add a dummy first_text.
+ chunks.insert(0, ('', 'us-ascii'))
+ first_text = ''
first_text = re.sub(prefix_pattern, '', first_text).lstrip()
rematch = re.match(RE_PATTERN, first_text, re.I)
if rematch:
=====================================
src/mailman/handlers/tests/test_subject_prefix.py
=====================================
--- a/src/mailman/handlers/tests/test_subject_prefix.py
+++ b/src/mailman/handlers/tests/test_subject_prefix.py
@@ -55,7 +55,7 @@ class TestSubjectPrefix(unittest.TestCase):
self._mlist.subject_prefix = ' '
msg = Message()
msg['Subject'] = 'A test message'
- self._process(self._mlist, msg, dict(_fasttrack=True))
+ self._process(self._mlist, msg, {})
self.assertEqual(str(msg['subject']), 'A test message')
def test_save_original_subject(self):
@@ -136,3 +136,11 @@ class TestSubjectPrefix(unittest.TestCase):
subject = msg['subject']
self.assertEqual(subject.encode(),
'=?iso-8859-1?q?=5BTest=5D_?= Plain text')
+
+ def test_unknown_encoded_subject(self):
+ msg = Message()
+ msg['Subject'] = '=?unknown-8bit?q?Non-ascii_subject_-_français?='
+ self._process(self._mlist, msg, {})
+ subject = msg['subject']
+ self.assertEqual(str(subject),
+ '[Test] Non-ascii subject - fran�ais')
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/5477a201469cdd2259225d07ab4052e348e0e1b3...8a87a59cf5e60ead2b5a4d6faee39443f459e272
---
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/5477a201469cdd2259225d07ab4052e348e0e1b3...8a87a59cf5e60ead2b5a4d6faee39443f459e272
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org