diff options
author | Barry Warsaw <barry@python.org> | 2002-11-05 20:54:37 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2002-11-05 20:54:37 (GMT) |
commit | 5c9130ec466f531b7cea6302c762d8a29641b219 (patch) | |
tree | 0c72e838160c3c12536d5508101c7e3eeb0a3de7 | |
parent | 00e6a02ef89fa8d4e388bee94acc2240ce961d5f (diff) | |
download | cpython-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.py | 8 |
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 |