mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
#18324: set_payload now correctly handles binary input.
This also backs out the previous fixes for for #14360, #1717, and #16564. Those bugs were actually caused by the fact that set_payload didn't decode to str, thus rendering the model inconsistent. This fix does mean the data processed by the encoder functions goes through an extra encode/decode cycle, but it means the model is always consistent. Future API updates will provide a better way to encode payloads, which will bypass this minor de-optimization. Tests by Vajrasky Kok.
This commit is contained in:
parent
0b169125ca
commit
00ae435dee
4 changed files with 45 additions and 16 deletions
|
@ -593,6 +593,42 @@ class TestMessageAPI(TestEmailBase):
|
|||
"attachment; filename*=utf-8''Fu%C3%9Fballer%20%5Bfilename%5D.ppt",
|
||||
msg['Content-Disposition'])
|
||||
|
||||
def test_binary_quopri_payload(self):
|
||||
for charset in ('latin-1', 'ascii'):
|
||||
msg = Message()
|
||||
msg['content-type'] = 'text/plain; charset=%s' % charset
|
||||
msg['content-transfer-encoding'] = 'quoted-printable'
|
||||
msg.set_payload(b'foo=e6=96=87bar')
|
||||
self.assertEqual(
|
||||
msg.get_payload(decode=True),
|
||||
b'foo\xe6\x96\x87bar',
|
||||
'get_payload returns wrong result with charset %s.' % charset)
|
||||
|
||||
def test_binary_base64_payload(self):
|
||||
for charset in ('latin-1', 'ascii'):
|
||||
msg = Message()
|
||||
msg['content-type'] = 'text/plain; charset=%s' % charset
|
||||
msg['content-transfer-encoding'] = 'base64'
|
||||
msg.set_payload(b'Zm9v5paHYmFy')
|
||||
self.assertEqual(
|
||||
msg.get_payload(decode=True),
|
||||
b'foo\xe6\x96\x87bar',
|
||||
'get_payload returns wrong result with charset %s.' % charset)
|
||||
|
||||
def test_binary_uuencode_payload(self):
|
||||
for charset in ('latin-1', 'ascii'):
|
||||
for encoding in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
|
||||
msg = Message()
|
||||
msg['content-type'] = 'text/plain; charset=%s' % charset
|
||||
msg['content-transfer-encoding'] = encoding
|
||||
msg.set_payload(b"begin 666 -\n)9F]OYI:'8F%R\n \nend\n")
|
||||
self.assertEqual(
|
||||
msg.get_payload(decode=True),
|
||||
b'foo\xe6\x96\x87bar',
|
||||
str(('get_payload returns wrong result ',
|
||||
'with charset {0} and encoding {1}.')).\
|
||||
format(charset, encoding))
|
||||
|
||||
def test_add_header_with_name_only_param(self):
|
||||
msg = Message()
|
||||
msg.add_header('Content-Disposition', 'inline', foo_bar=None)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue