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: [email protected]
+To: [email protected]
+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
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org