Barry Warsaw pushed to branch master at mailman / Mailman
Commits: df9ef8c8 by Mark Sapiro at 2017-05-24T22:27:48+00:00 Account for msg['subject'] possibly being a Header instance. - - - - - 787f5c08 by Barry Warsaw at 2017-05-24T22:27:49+00:00 Merge branch 'header' into 'master' Account for msg['subject'] possibly being a Header instance. Closes #338 See merge request !278 - - - - - 2 changed files: - src/mailman/chains/headers.py - src/mailman/chains/tests/test_headers.py Changes: ===================================== src/mailman/chains/headers.py ===================================== --- a/src/mailman/chains/headers.py +++ b/src/mailman/chains/headers.py @@ -20,6 +20,7 @@ import re import logging +from email.header import Header from itertools import count from mailman.chains.base import Chain, Link from mailman.config import config @@ -101,6 +102,8 @@ class HeaderMatchRule: for p in msg.walk(): headers.extend(p.get_all(self.header, [])) for value in headers: + if isinstance(value, Header): + value = value.encode() if re.search(self.pattern, value, re.IGNORECASE): return True return False ===================================== src/mailman/chains/tests/test_headers.py ===================================== --- a/src/mailman/chains/tests/test_headers.py +++ b/src/mailman/chains/tests/test_headers.py @@ -19,6 +19,7 @@ import unittest +from email.header import Header from mailman.app.lifecycle import create_list from mailman.chains.headers import HeaderMatchRule, make_link from mailman.config import config @@ -209,6 +210,35 @@ This is junk self.assertIsInstance(event, HoldEvent) self.assertEqual(event.chain, config.chains['hold']) + def test_get_all_returns_non_string(self): + # Test case where msg.get_all() returns header instance. + msg = mfs("""\ +From: a...@example.com +To: t...@example.com +Subject: =?unknown-8bit?q?Become_smarter_now_=96_Increase__your_brain...?= +Message-ID: <ant> + +body + +""") + # XXX In the wild we have seen a message instance in which the subject + # header value is an email.header.Header instance rather than a + # string. We don't know how to recreate that here so we cheat. + msg['Subject'] = Header( + 'Become_smarter_now \x96 Increase your brain...', 'utf-8') + msgdata = {} + header_matches = IHeaderMatchList(self._mlist) + header_matches.append('Subject', '=\?utf', 'hold') + # This event subscriber records the event that occurs when the message + # is processed by the owner chain. + events = [] + with event_subscribers(events.append): + process(self._mlist, msg, msgdata, start_chain='header-match') + self.assertEqual(len(events), 1) + event = events[0] + self.assertIsInstance(event, HoldEvent) + self.assertEqual(event.chain, config.chains['hold']) + @configuration('antispam', header_checks=""" Foo: foo """, jump_chain='hold') View it on GitLab: https://gitlab.com/mailman/mailman/compare/6894855b2b6c6fb7ada2dca3708f67a16cf2e2da...787f5c0807a19dbb6c54868856ae94408bf74cec --- View it on GitLab: https://gitlab.com/mailman/mailman/compare/6894855b2b6c6fb7ada2dca3708f67a16cf2e2da...787f5c0807a19dbb6c54868856ae94408bf74cec You're receiving this email because of your account on gitlab.com.
_______________________________________________ Mailman-checkins mailing list Mailman-checkins@python.org Unsubscribe: https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org