diff options
Diffstat (limited to 'Lib/test/test_email/test_email.py')
-rw-r--r-- | Lib/test/test_email/test_email.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 2deb357..724af3b 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -728,6 +728,31 @@ class TestMessageAPI(TestEmailBase): "attachment; filename*=utf-8''Fu%C3%9Fballer%20%5Bfilename%5D.ppt", msg['Content-Disposition']) + 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 policy in (email.policy.default, email.policy.compat32): + for setter in (Message.__setitem__, Message.add_header): + for name, value in invalid_headers: + self.do_test_invalid_header_names( + 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 = Message(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_binary_quopri_payload(self): for charset in ('latin-1', 'ascii'): msg = Message() |