X Tutup
Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion Lib/email/feedparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def close(self):
assert not self._msgstack
# Look for final set of defects
if root.get_content_maintype() == 'multipart' \
and not root.is_multipart():
and not root.is_multipart() and not self._headersonly:
defect = errors.MultipartInvariantViolationDefect()
self.policy.handle_defect(root, defect)
return root
Expand Down
14 changes: 14 additions & 0 deletions Lib/test/test_email/data/msg_47.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Date: 01 Jan 2001 00:01+0000
From: arthur@example.example
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=foo

--foo
Content-Type: text/plain
bar

--foo
Content-Type: text/html
<html><body><p>baz</p></body></html>

--foo--
10 changes: 10 additions & 0 deletions Lib/test/test_email/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -3712,6 +3712,16 @@ def test_bytes_header_parser(self):
self.assertIsInstance(msg.get_payload(), str)
self.assertIsInstance(msg.get_payload(decode=True), bytes)

def test_header_parser_multipart_is_valid(self):
# Don't flag valid multipart emails as having defects
with openfile('msg_47.txt', encoding="utf-8") as fp:
msgdata = fp.read()

parser = email.parser.Parser(policy=email.policy.default)
parsed_msg = parser.parsestr(msgdata, headersonly=True)

self.assertEqual(parsed_msg.defects, [])

def test_bytes_parser_does_not_close_file(self):
with openfile('msg_02.txt', 'rb') as fp:
email.parser.BytesParser().parse(fp)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Do not report ``MultipartInvariantViolationDefect`` defect
when the :class:`email.parser.Parser` class is used
to parse emails with ``headersonly=True``.
X Tutup