gh-134759: fix UnboundLocalError in email.message.Message.get_payload (#136071)

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
Kliment Lamonov 2025-07-12 16:30:09 +03:00 committed by GitHub
parent 5a20e79725
commit 25335d297b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 14 additions and 0 deletions

View file

@ -313,6 +313,8 @@ def get_payload(self, i=None, decode=False):
# If it does happen, turn the string into bytes in a way
# guaranteed not to fail.
bpayload = payload.encode('raw-unicode-escape')
else:
bpayload = payload
if cte == 'quoted-printable':
return quopri.decodestring(bpayload)
elif cte == 'base64':

View file

@ -1055,6 +1055,15 @@ def test_get_body_malformed(self):
# AttributeError: 'str' object has no attribute 'is_attachment'
m.get_body()
def test_get_bytes_payload_with_quoted_printable_encoding(self):
# We use a memoryview to avoid directly changing the private payload
# and to prevent using the dedicated paths for string or bytes objects.
payload = memoryview(b'Some payload')
m = self._make_message()
m.add_header('Content-Transfer-Encoding', 'quoted-printable')
m.set_payload(payload)
self.assertEqual(m.get_payload(decode=True), payload)
class TestMIMEPart(TestEmailMessageBase, TestEmailBase):
# Doing the full test run here may seem a bit redundant, since the two

View file

@ -1055,6 +1055,7 @@ Alexander Lakeev
David Lam
Thomas Lamb
Valerie Lambert
Kliment Lamonov
Peter Lamut
Jean-Baptiste "Jiba" Lamy
Ronan Lamy

View file

@ -0,0 +1,2 @@
Fix :exc:`UnboundLocalError` in :func:`email.message.Message.get_payload` when
the payload to decode is a :class:`bytes` object. Patch by Kliment Lamonov.