Skip to content

Commit 8129d13

Browse files
committed
Add test case for invalid_header_names
1 parent d1b07c5 commit 8129d13

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

Lib/test/test_email/test_message.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,6 +1004,45 @@ def test_folding_with_long_nospace_http_policy_1(self):
10041004
parsed_msg = message_from_bytes(m.as_bytes(), policy=policy.default)
10051005
self.assertEqual(parsed_msg['Message-ID'], m['Message-ID'])
10061006

1007+
def test_invalid_header_names(self):
1008+
invalid_headers = [
1009+
('Invalid Header', 'contains space'),
1010+
('Tab\tHeader', 'contains tab'),
1011+
('Colon:Header', 'contains colon'),
1012+
('', 'Empty name'),
1013+
(' LeadingSpace', 'starts with space'),
1014+
('TrailingSpace ', 'ends with space'),
1015+
]
1016+
for name, value in invalid_headers:
1017+
with self.subTest(name=name, problem=value):
1018+
with self.assertRaises(ValueError) as cm:
1019+
EmailMessage().add_header(name, value)
1020+
self.assertIn(f"Invalid header field name {name!r}", str(cm.exception))
1021+
1022+
invalid_headers = [
1023+
('Header\x7F', 'Non-ASCII character'),
1024+
('Header\x1F', 'control character'),
1025+
]
1026+
for name, value in invalid_headers:
1027+
with self.subTest(name=name, problem=value):
1028+
with self.assertRaises(ValueError) as cm:
1029+
EmailMessage().add_header(name, value)
1030+
self.assertIn(f"Header field name contains invalid characters: {name!r}", str(cm.exception))
1031+
1032+
for name, value in invalid_headers:
1033+
with self.subTest(name=name, problem=value):
1034+
with self.assertRaises(ValueError) as cm:
1035+
m = EmailMessage()
1036+
m[name] = value
1037+
self.assertIn(f"Invalid header field name {name!r}", str(cm.exception))
1038+
1039+
for name, value in invalid_headers:
1040+
with self.subTest(name=name, problem=value):
1041+
with self.assertRaises(ValueError) as cm:
1042+
m = EmailMessage()
1043+
m[name] = value
1044+
self.assertIn(f"Header field name contains invalid characters: {name!r}", str(cm.exception))
1045+
10071046
def test_get_body_malformed(self):
10081047
"""test for bpo-42892"""
10091048
msg = textwrap.dedent("""\

0 commit comments

Comments
 (0)