@@ -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\t Header' , '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