diff options
Diffstat (limited to 'Lib/test/test_email/test_message.py')
-rw-r--r-- | Lib/test/test_email/test_message.py | 24 |
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("""\ |