summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_email/test_message.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_email/test_message.py')
-rw-r--r--Lib/test/test_email/test_message.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_email/test_message.py b/Lib/test/test_email/test_message.py
index 96979db..23c3977 100644
--- a/Lib/test/test_email/test_message.py
+++ b/Lib/test/test_email/test_message.py
@@ -1004,6 +1004,30 @@ class TestEmailMessage(TestEmailMessageBase, TestEmailBase):
parsed_msg = message_from_bytes(m.as_bytes(), policy=policy.default)
self.assertEqual(parsed_msg['Message-ID'], m['Message-ID'])
+ def test_invalid_header_names(self):
+ invalid_headers = [
+ ('Invalid Header', 'contains space'),
+ ('Tab\tHeader', 'contains tab'),
+ ('Colon:Header', 'contains colon'),
+ ('', 'Empty name'),
+ (' LeadingSpace', 'starts with space'),
+ ('TrailingSpace ', 'ends with space'),
+ ('Header\x7F', 'Non-ASCII character'),
+ ('Header\x80', 'Extended ASCII'),
+ ]
+ for email_policy in (policy.default, policy.compat32):
+ for setter in (EmailMessage.__setitem__, EmailMessage.add_header):
+ for name, value in invalid_headers:
+ self.do_test_invalid_header_names(email_policy, setter, name, value)
+
+ def do_test_invalid_header_names(self, policy, setter, name, value):
+ with self.subTest(policy=policy, setter=setter, name=name, value=value):
+ message = EmailMessage(policy=policy)
+ pattern = r'(?i)(?=.*invalid)(?=.*header)(?=.*name)'
+ with self.assertRaisesRegex(ValueError, pattern) as cm:
+ setter(message, name, value)
+ self.assertIn(f"{name!r}", str(cm.exception))
+
def test_get_body_malformed(self):
"""test for bpo-42892"""
msg = textwrap.dedent("""\