diff options
| author | Mark Sapiro | 2017-05-24 22:27:48 +0000 |
|---|---|---|
| committer | Barry Warsaw | 2017-05-24 22:27:48 +0000 |
| commit | df9ef8c8b2d4152e1970f7d0021bcc9a242ceaa8 (patch) | |
| tree | ffcee2b13164c415c8b48e9b46c82207e5ba2bbf /src | |
| parent | 6894855b2b6c6fb7ada2dca3708f67a16cf2e2da (diff) | |
| download | mailman-df9ef8c8b2d4152e1970f7d0021bcc9a242ceaa8.tar.gz mailman-df9ef8c8b2d4152e1970f7d0021bcc9a242ceaa8.tar.zst mailman-df9ef8c8b2d4152e1970f7d0021bcc9a242ceaa8.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/chains/headers.py | 3 | ||||
| -rw-r--r-- | src/mailman/chains/tests/test_headers.py | 30 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/mailman/chains/headers.py b/src/mailman/chains/headers.py index d41e64386..6fc061fe4 100644 --- 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 diff --git a/src/mailman/chains/tests/test_headers.py b/src/mailman/chains/tests/test_headers.py index b74b8ebc9..3da7a2435 100644 --- 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: anne@example.com +To: test@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') |
