mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	Merge: #16948: Fix quopri encoding of non-latin1 character sets.
This commit is contained in:
		
						commit
						c44911f49a
					
				
					 3 changed files with 37 additions and 0 deletions
				
			
		| 
						 | 
					@ -392,6 +392,19 @@ class Charset:
 | 
				
			||||||
                string = string.encode(self.output_charset)
 | 
					                string = string.encode(self.output_charset)
 | 
				
			||||||
            return email.base64mime.body_encode(string)
 | 
					            return email.base64mime.body_encode(string)
 | 
				
			||||||
        elif self.body_encoding is QP:
 | 
					        elif self.body_encoding is QP:
 | 
				
			||||||
 | 
					            # quopromime.body_encode takes a string, but operates on it as if
 | 
				
			||||||
 | 
					            # it were a list of byte codes.  For a (minimal) history on why
 | 
				
			||||||
 | 
					            # this is so, see changeset 0cf700464177.  To correctly encode a
 | 
				
			||||||
 | 
					            # character set, then, we must turn it into pseudo bytes via the
 | 
				
			||||||
 | 
					            # latin1 charset, which will encode any byte as a single code point
 | 
				
			||||||
 | 
					            # between 0 and 255, which is what body_encode is expecting.
 | 
				
			||||||
 | 
					            #
 | 
				
			||||||
 | 
					            # Note that this clause doesn't handle the case of a _payload that
 | 
				
			||||||
 | 
					            # is already bytes.  It never did, and the semantics of _payload
 | 
				
			||||||
 | 
					            # being bytes has never been nailed down, so fixing that is a
 | 
				
			||||||
 | 
					            # longer term TODO.
 | 
				
			||||||
 | 
					            if isinstance(string, str):
 | 
				
			||||||
 | 
					                string = string.encode(self.output_charset).decode('latin1')
 | 
				
			||||||
            return email.quoprimime.body_encode(string)
 | 
					            return email.quoprimime.body_encode(string)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            if isinstance(string, str):
 | 
					            if isinstance(string, str):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -677,6 +677,27 @@ class TestEncoders(unittest.TestCase):
 | 
				
			||||||
        msg = MIMEText('文', _charset='euc-jp')
 | 
					        msg = MIMEText('文', _charset='euc-jp')
 | 
				
			||||||
        eq(msg['content-transfer-encoding'], '7bit')
 | 
					        eq(msg['content-transfer-encoding'], '7bit')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_qp_encode_latin1(self):
 | 
				
			||||||
 | 
					        msg = MIMEText('\xe1\xf6\n', 'text', 'ISO-8859-1')
 | 
				
			||||||
 | 
					        self.assertEqual(str(msg), textwrap.dedent("""\
 | 
				
			||||||
 | 
					            MIME-Version: 1.0
 | 
				
			||||||
 | 
					            Content-Type: text/text; charset="iso-8859-1"
 | 
				
			||||||
 | 
					            Content-Transfer-Encoding: quoted-printable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            =E1=F6
 | 
				
			||||||
 | 
					            """))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_qp_encode_non_latin1(self):
 | 
				
			||||||
 | 
					        # Issue 16948
 | 
				
			||||||
 | 
					        msg = MIMEText('\u017c\n', 'text', 'ISO-8859-2')
 | 
				
			||||||
 | 
					        self.assertEqual(str(msg), textwrap.dedent("""\
 | 
				
			||||||
 | 
					            MIME-Version: 1.0
 | 
				
			||||||
 | 
					            Content-Type: text/text; charset="iso-8859-2"
 | 
				
			||||||
 | 
					            Content-Transfer-Encoding: quoted-printable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            =BF
 | 
				
			||||||
 | 
					            """))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Test long header wrapping
 | 
					# Test long header wrapping
 | 
				
			||||||
class TestLongHeaders(TestEmailBase):
 | 
					class TestLongHeaders(TestEmailBase):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -235,6 +235,9 @@ Core and Builtins
 | 
				
			||||||
Library
 | 
					Library
 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Issue #16948: Fix quoted printable body encoding for non-latin1 character
 | 
				
			||||||
 | 
					  sets in the email package.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #16811: Fix folding of headers with no value in the provisional email
 | 
					- Issue #16811: Fix folding of headers with no value in the provisional email
 | 
				
			||||||
  policies.
 | 
					  policies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue