mirror of
https://github.com/python/cpython.git
synced 2025-11-03 11:23:31 +00:00
get_payload(): Teach this about various uunencoded
Content-Transfer-Encodings
This commit is contained in:
parent
3840b49d9c
commit
08898499b2
1 changed files with 21 additions and 10 deletions
|
|
@ -5,6 +5,7 @@
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import uu
|
||||||
import binascii
|
import binascii
|
||||||
import warnings
|
import warnings
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
|
|
@ -165,13 +166,15 @@ class Message:
|
||||||
the list object, you modify the message's payload in place. Optional
|
the list object, you modify the message's payload in place. Optional
|
||||||
i returns that index into the payload.
|
i returns that index into the payload.
|
||||||
|
|
||||||
Optional decode is a flag (defaulting to False) indicating whether the
|
Optional decode is a flag indicating whether the payload should be
|
||||||
payload should be decoded or not, according to the
|
decoded or not, according to the Content-Transfer-Encoding header
|
||||||
Content-Transfer-Encoding header. When True and the message is not a
|
(default is False).
|
||||||
multipart, the payload will be decoded if this header's value is
|
|
||||||
`quoted-printable' or `base64'. If some other encoding is used, or
|
When True and the message is not a multipart, the payload will be
|
||||||
the header is missing, or if the payload has bogus base64 data, the
|
decoded if this header's value is `quoted-printable' or `base64'. If
|
||||||
payload is returned as-is (undecoded).
|
some other encoding is used, or the header is missing, or if the
|
||||||
|
payload has bogus data (i.e. bogus base64 or uuencoded data), the
|
||||||
|
payload is returned as-is.
|
||||||
|
|
||||||
If the message is a multipart and the decode flag is True, then None
|
If the message is a multipart and the decode flag is True, then None
|
||||||
is returned.
|
is returned.
|
||||||
|
|
@ -185,15 +188,23 @@ class Message:
|
||||||
if decode:
|
if decode:
|
||||||
if self.is_multipart():
|
if self.is_multipart():
|
||||||
return None
|
return None
|
||||||
cte = self.get('content-transfer-encoding', '')
|
cte = self.get('content-transfer-encoding', '').lower()
|
||||||
if cte.lower() == 'quoted-printable':
|
if cte == 'quoted-printable':
|
||||||
return Utils._qdecode(payload)
|
return Utils._qdecode(payload)
|
||||||
elif cte.lower() == 'base64':
|
elif cte == 'base64':
|
||||||
try:
|
try:
|
||||||
return Utils._bdecode(payload)
|
return Utils._bdecode(payload)
|
||||||
except binascii.Error:
|
except binascii.Error:
|
||||||
# Incorrect padding
|
# Incorrect padding
|
||||||
return payload
|
return payload
|
||||||
|
elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
|
||||||
|
sfp = StringIO()
|
||||||
|
try:
|
||||||
|
uu.decode(StringIO(payload+'\n'), sfp)
|
||||||
|
payload = sfp.getvalue()
|
||||||
|
except uu.Error:
|
||||||
|
# Some decoding problem
|
||||||
|
return payload
|
||||||
# Everything else, including encodings with 8bit or 7bit are returned
|
# Everything else, including encodings with 8bit or 7bit are returned
|
||||||
# unchanged.
|
# unchanged.
|
||||||
return payload
|
return payload
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue