summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2002-11-05 20:54:37 (GMT)
committerBarry Warsaw <barry@python.org>2002-11-05 20:54:37 (GMT)
commit5c9130ec466f531b7cea6302c762d8a29641b219 (patch)
tree0c72e838160c3c12536d5508101c7e3eeb0a3de7
parent00e6a02ef89fa8d4e388bee94acc2240ce961d5f (diff)
downloadcpython-5c9130ec466f531b7cea6302c762d8a29641b219.zip
cpython-5c9130ec466f531b7cea6302c762d8a29641b219.tar.gz
cpython-5c9130ec466f531b7cea6302c762d8a29641b219.tar.bz2
_parsebody(): A fix for SF bug #631350, where a subobject in a
multipart/digest isn't a message/rfc822. This is legal, but counter to recommended practice in RFC 2046, $5.1.5. The fix is to look at the content type after setting the default content type. If the maintype is then message or multipart, attach the parsed subobject, otherwise use set_payload() to set the data of the other object.
-rw-r--r--Lib/email/Parser.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/Lib/email/Parser.py b/Lib/email/Parser.py
index 5fea3c3..6dfa4d3 100644
--- a/Lib/email/Parser.py
+++ b/Lib/email/Parser.py
@@ -221,9 +221,13 @@ class Parser:
# msgobj in this case is the "message/rfc822" container
msgobj = self.parsestr(parthdrs, headersonly=1)
# while submsgobj is the message itself
- submsgobj = self.parsestr(part)
- msgobj.attach(submsgobj)
msgobj.set_default_type('message/rfc822')
+ maintype = msgobj.get_content_maintype()
+ if maintype in ('message', 'multipart'):
+ submsgobj = self.parsestr(part)
+ msgobj.attach(submsgobj)
+ else:
+ msgobj.set_payload(part)
else:
msgobj = self.parsestr(part)
container.preamble = preamble