@@ -2491,6 +2491,38 @@ def test_get_address_quoted_strings_in_atom_list(self):
24912491 self .assertEqual (address .all_mailboxes [0 ].domain , 'example.com' )
24922492 self .assertEqual (address .all_mailboxes [0 ].addr_spec , '"example example"@example.com' )
24932493
2494+ def test_get_address_with_invalid_domain (self ):
2495+ address = self ._test_get_x (parser .get_address ,
2496+ '<T@[' ,
2497+ '<T@[]>' ,
2498+ '<T@[]>' ,
2499+ [errors .InvalidHeaderDefect , # missing trailing '>' on angle-addr
2500+ errors .InvalidHeaderDefect , # end of input inside domain-literal
2501+ ],
2502+ '' )
2503+ self .assertEqual (address .token_type , 'address' )
2504+ self .assertEqual (len (address .mailboxes ), 0 )
2505+ self .assertEqual (len (address .all_mailboxes ), 1 )
2506+ self .assertEqual (address .all_mailboxes [0 ].domain , '[]' )
2507+ self .assertEqual (address .all_mailboxes [0 ].local_part , 'T' )
2508+ self .assertEqual (address .all_mailboxes [0 ].token_type , 'invalid-mailbox' )
2509+ self .assertEqual (address [0 ].token_type , 'invalid-mailbox' )
2510+
2511+ address = self ._test_get_x (parser .get_address ,
2512+ '!an??:=m==fr2@[C' ,
2513+ '!an??:=m==fr2@[C];' ,
2514+ '!an??:=m==fr2@[C];' ,
2515+ [errors .InvalidHeaderDefect , # end of header in group
2516+ errors .InvalidHeaderDefect , # end of input inside domain-literal
2517+ ],
2518+ '' )
2519+ self .assertEqual (address .token_type , 'address' )
2520+ self .assertEqual (len (address .mailboxes ), 0 )
2521+ self .assertEqual (len (address .all_mailboxes ), 1 )
2522+ self .assertEqual (address .all_mailboxes [0 ].domain , '[C]' )
2523+ self .assertEqual (address .all_mailboxes [0 ].local_part , '=m==fr2' )
2524+ self .assertEqual (address .all_mailboxes [0 ].token_type , 'invalid-mailbox' )
2525+ self .assertEqual (address [0 ].token_type , 'group' )
24942526
24952527 # get_address_list
24962528
@@ -2765,6 +2797,19 @@ def test_parse_valid_message_id(self):
27652797 )
27662798 self .assertEqual (message_id .token_type , 'message-id' )
27672799
2800+ def test_parse_message_id_with_invalid_domain (self ):
2801+ message_id = self ._test_parse_x (
2802+ parser .parse_message_id ,
2803+ "<T@[" ,
2804+ "<T@[]>" ,
2805+ "<T@[]>" ,
2806+ [errors .ObsoleteHeaderDefect ] + [errors .InvalidHeaderDefect ] * 2 ,
2807+ [],
2808+ )
2809+ self .assertEqual (message_id .token_type , 'message-id' )
2810+ self .assertEqual (str (message_id .all_defects [- 1 ]),
2811+ "end of input inside domain-literal" )
2812+
27682813 def test_parse_message_id_with_remaining (self ):
27692814 message_id = self ._test_parse_x (
27702815 parser .parse_message_id ,
0 commit comments