summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_email/test_email.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_email/test_email.py')
-rw-r--r--Lib/test/test_email/test_email.py25
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()