Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Lib/email/_header_value_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -1024,6 +1024,7 @@ def _get_ptext_to_endchars(value, endchars):
vchars = []
escape = False
had_qp = False
pos = 0
for pos in range(len(fragment)):
if fragment[pos] == '\\':
if escape:
Expand Down Expand Up @@ -1573,7 +1574,7 @@ def get_dtext(value):
def _check_for_early_dl_end(value, domain_literal):
if value:
return False
domain_literal.append(errors.InvalidHeaderDefect(
domain_literal.defects.append(errors.InvalidHeaderDefect(
"end of input inside domain-literal"))
domain_literal.append(ValueTerminal(']', 'domain-literal-end'))
return True
Expand Down
15 changes: 15 additions & 0 deletions Lib/test/test_email/test__header_value_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,9 @@ def test_get_qp_ctext_non_printables(self):
[errors.NonPrintableDefect], ')')
self.assertEqual(ptext.defects[0].non_printables[0], '\x00')

def test_get_qp_ctext_empty(self):
self._test_get_x(parser.get_qp_ctext, '', '', ' ', [], '')

# get_qcontent

def test_get_qcontent_only(self):
Expand Down Expand Up @@ -503,6 +506,9 @@ def test_get_qcontent_non_printables(self):
[errors.NonPrintableDefect], '"')
self.assertEqual(ptext.defects[0].non_printables[0], '\x00')

def test_get_qcontent_empty(self):
self._test_get_x(parser.get_qcontent, '', '', '', [], '')

# get_atext

def test_get_atext_only(self):
Expand Down Expand Up @@ -1283,6 +1289,9 @@ def test_get_dtext_open_bracket_mid_word(self):
self._test_get_x(parser.get_dtext,
'foo[bar', 'foo', 'foo', [], '[bar')

def test_get_dtext_empty(self):
self._test_get_x(parser.get_dtext, '', '', '', [], '')

# get_domain_literal

def test_get_domain_literal_only(self):
Expand Down Expand Up @@ -2732,6 +2741,12 @@ def test_parse_valid_message_id(self):
)
self.assertEqual(message_id.token_type, 'message-id')

def test_parse_message_id_with_invalid_domain(self):
message_id = parser.parse_message_id("<T@[")
self.assertEqual(message_id.token_type, 'message-id')
self.assertEqual(str(message_id.all_defects[-1]),
"end of input inside domain-literal")

def test_parse_message_id_with_remaining(self):
message_id = self._test_parse_x(
parser.parse_message_id,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix parsing of emails message_id with invalid domain.
Loading