diff options
-rw-r--r-- | Lib/email/_header_value_parser.py | 2 | ||||
-rw-r--r-- | Lib/test/test_email/test__header_value_parser.py | 6 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst | 1 |
3 files changed, 8 insertions, 1 deletions
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py index cb01322..9c55ef7 100644 --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -2047,7 +2047,7 @@ def get_msg_id(value): no-fold-literal = "[" *dtext "]" """ msg_id = MsgID() - if value[0] in CFWS_LEADER: + if value and value[0] in CFWS_LEADER: token, value = get_cfws(value) msg_id.append(token) if not value or value[0] != '<': diff --git a/Lib/test/test_email/test__header_value_parser.py b/Lib/test/test_email/test__header_value_parser.py index d59d701..1bdcfa1 100644 --- a/Lib/test/test_email/test__header_value_parser.py +++ b/Lib/test/test_email/test__header_value_parser.py @@ -2583,6 +2583,11 @@ class TestParser(TestParserMixin, TestEmailBase): # get_msg_id + def test_get_msg_id_empty(self): + # bpo-38708: Test that HeaderParseError is raised and not IndexError. + with self.assertRaises(errors.HeaderParseError): + parser.get_msg_id('') + def test_get_msg_id_valid(self): msg_id = self._test_get_x( parser.get_msg_id, @@ -2694,6 +2699,7 @@ class TestParser(TestParserMixin, TestEmailBase): self.assertEqual(msg_id.token_type, 'msg-id') + @parameterize class Test_parse_mime_parameters(TestParserMixin, TestEmailBase): diff --git a/Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst b/Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst new file mode 100644 index 0000000..23a0a46 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst @@ -0,0 +1 @@ +Fix a potential IndexError in email parser when parsing an empty msg-id. |