|
21 | 21 | from email.charset import Charset |
22 | 22 | from email.header import Header, decode_header, make_header |
23 | 23 | from email.parser import Parser, HeaderParser |
24 | | -from email.generator import Generator, DecodedGenerator |
| 24 | +from email.generator import Generator, DecodedGenerator, BytesGenerator |
25 | 25 | from email.message import Message |
26 | 26 | from email.mime.application import MIMEApplication |
27 | 27 | from email.mime.audio import MIMEAudio |
@@ -1306,6 +1306,20 @@ def test_mangle_from_in_preamble_and_epilog(self): |
1306 | 1306 | self.assertEqual(len([1 for x in s.getvalue().split('\n') |
1307 | 1307 | if x.startswith('>From ')]), 2) |
1308 | 1308 |
|
| 1309 | + def test_mangled_from_with_bad_bytes(self): |
| 1310 | + source = textwrap.dedent("""\ |
| 1311 | + Content-Type: text/plain; charset="utf-8" |
| 1312 | + MIME-Version: 1.0 |
| 1313 | + Content-Transfer-Encoding: 8bit |
| 1314 | + |
| 1315 | +
|
| 1316 | + """).encode('utf-8') |
| 1317 | + msg = email.message_from_bytes(source + b'From R\xc3\xb6lli\n') |
| 1318 | + b = BytesIO() |
| 1319 | + g = BytesGenerator(b, mangle_from_=True) |
| 1320 | + g.flatten(msg) |
| 1321 | + self.assertEqual(b.getvalue(), source + b'>From R\xc3\xb6lli\n') |
| 1322 | + |
1309 | 1323 |
|
1310 | 1324 | # Test the basic MIMEAudio class |
1311 | 1325 | class TestMIMEAudio(unittest.TestCase): |
|
0 commit comments