mirror of https://github.com/python/cpython
Merge #15249: Mangle From lines correctly when body contains invalid bytes.
Fix by Colin Su. Test by me, based on a test written by Petri Lehtinen.
This commit is contained in:
commit
ad2a7d528a
|
@ -400,6 +400,8 @@ class BytesGenerator(Generator):
|
||||||
if msg._payload is None:
|
if msg._payload is None:
|
||||||
return
|
return
|
||||||
if _has_surrogates(msg._payload) and not self.policy.cte_type=='7bit':
|
if _has_surrogates(msg._payload) and not self.policy.cte_type=='7bit':
|
||||||
|
if self._mangle_from_:
|
||||||
|
msg._payload = fcre.sub(">From ", msg._payload)
|
||||||
self.write(msg._payload)
|
self.write(msg._payload)
|
||||||
else:
|
else:
|
||||||
super(BytesGenerator,self)._handle_text(msg)
|
super(BytesGenerator,self)._handle_text(msg)
|
||||||
|
|
|
@ -21,7 +21,7 @@ import email.policy
|
||||||
from email.charset import Charset
|
from email.charset import Charset
|
||||||
from email.header import Header, decode_header, make_header
|
from email.header import Header, decode_header, make_header
|
||||||
from email.parser import Parser, HeaderParser
|
from email.parser import Parser, HeaderParser
|
||||||
from email.generator import Generator, DecodedGenerator
|
from email.generator import Generator, DecodedGenerator, BytesGenerator
|
||||||
from email.message import Message
|
from email.message import Message
|
||||||
from email.mime.application import MIMEApplication
|
from email.mime.application import MIMEApplication
|
||||||
from email.mime.audio import MIMEAudio
|
from email.mime.audio import MIMEAudio
|
||||||
|
@ -1306,6 +1306,20 @@ Blah blah blah
|
||||||
self.assertEqual(len([1 for x in s.getvalue().split('\n')
|
self.assertEqual(len([1 for x in s.getvalue().split('\n')
|
||||||
if x.startswith('>From ')]), 2)
|
if x.startswith('>From ')]), 2)
|
||||||
|
|
||||||
|
def test_mangled_from_with_bad_bytes(self):
|
||||||
|
source = textwrap.dedent("""\
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
From: aaa@bbb.org
|
||||||
|
|
||||||
|
""").encode('utf-8')
|
||||||
|
msg = email.message_from_bytes(source + b'From R\xc3\xb6lli\n')
|
||||||
|
b = BytesIO()
|
||||||
|
g = BytesGenerator(b, mangle_from_=True)
|
||||||
|
g.flatten(msg)
|
||||||
|
self.assertEqual(b.getvalue(), source + b'>From R\xc3\xb6lli\n')
|
||||||
|
|
||||||
|
|
||||||
# Test the basic MIMEAudio class
|
# Test the basic MIMEAudio class
|
||||||
class TestMIMEAudio(unittest.TestCase):
|
class TestMIMEAudio(unittest.TestCase):
|
||||||
|
|
|
@ -1020,6 +1020,7 @@ Ken Stox
|
||||||
Dan Stromberg
|
Dan Stromberg
|
||||||
Daniel Stutzbach
|
Daniel Stutzbach
|
||||||
Andreas Stührk
|
Andreas Stührk
|
||||||
|
Colin Su
|
||||||
Pal Subbiah
|
Pal Subbiah
|
||||||
Nathan Sullivan
|
Nathan Sullivan
|
||||||
Mark Summerfield
|
Mark Summerfield
|
||||||
|
|
|
@ -29,6 +29,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #15249: BytesGenerator now correctly mangles From lines (when
|
||||||
|
requested) even if the body contains undecodable bytes.
|
||||||
|
|
||||||
- Issue #15777: Fix a refleak in _posixsubprocess.
|
- Issue #15777: Fix a refleak in _posixsubprocess.
|
||||||
|
|
||||||
- Issue ##665194: Update email.utils.localtime to use datetime.astimezone and
|
- Issue ##665194: Update email.utils.localtime to use datetime.astimezone and
|
||||||
|
|
Loading…
Reference in New Issue