]> granicus.if.org Git - python/commitdiff
Merged revisions 79996,80855 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Thu, 6 May 2010 01:53:03 +0000 (01:53 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Thu, 6 May 2010 01:53:03 +0000 (01:53 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r79996 | r.david.murray | 2010-04-12 10:48:58 -0400 (Mon, 12 Apr 2010) | 15 lines

  Merged revisions 79994 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r79994 | r.david.murray | 2010-04-12 10:26:06 -0400 (Mon, 12 Apr 2010) | 9 lines

    Issue #7472: ISO-2022 charsets now consistently use 7bit CTE.

    Fixed a typo in the email.encoders module so that messages output using
    an ISO-2022 character set will use a content-transfer-encoding of
    7bit consistently.  Previously if the input data had any eight bit
    characters the output data would get marked as 8bit even though it
    was actually 7bit.
  ........
................
  r80855 | r.david.murray | 2010-05-05 21:41:14 -0400 (Wed, 05 May 2010) | 24 lines

  Merged revisions 80800 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  It turns out that email5 (py3k), because it is using unicode for the
  payload, doesn't do the encoding to the output character set until later
  in the process.  Specifically, charset.body_encode no longer does the
  input-to-output charset conversion.  So the if test in the exception
  clause in encoders.encode_7or8bit really is needed in email5.

  So, this merge only merges the test, not the removal of the 'if'.

  ........
    r80800 | r.david.murray | 2010-05-05 13:31:03 -0400 (Wed, 05 May 2010) | 9 lines

    Issue #7472: remove unused code from email.encoders.encode_7or8bit.

    Yukihiro Nakadaira noticed a typo in encode_7or8bit that was trying
    to special case iso-2022 codecs.  It turns out that the code in
    question is never used, because whereas it was designed to trigger
    if the payload encoding was eight bit but its output encoding was
    7 bit, in practice the payload is always converted to the 7bit
    encoding before encode_7or8bit is called.  Patch by Shawat Anand.
  ........
................

Lib/email/encoders.py
Lib/email/test/test_email.py
Misc/NEWS

index 2e77e619e1d6281daa475b95025e17630d489ce5..20feb026fdf02975bdee07ad879c101577cfbc8b 100644 (file)
@@ -62,7 +62,7 @@ def encode_7or8bit(msg):
         # iso-2022-* is non-ASCII but still 7-bit
         charset = msg.get_charset()
         output_cset = charset and charset.output_charset
-        if output_cset and output_cset.lower().startswith('iso-2202-'):
+        if output_cset and output_cset.lower().startswith('iso-2022-'):
             msg['Content-Transfer-Encoding'] = '7bit'
         else:
             msg['Content-Transfer-Encoding'] = '8bit'
index 1f257c7a687a54b8b006bb7e3d31b1d0a2a48fd2..2ebd39f2db94fe7167966b38fbbcaa30d0c687ed 100644 (file)
@@ -526,6 +526,13 @@ class TestEncoders(unittest.TestCase):
         msg = MIMEText('hello \xf8 world', _charset='iso-8859-1')
         eq(msg['content-transfer-encoding'], 'quoted-printable')
 
+    def test_encode7or8bit(self):
+        # Make sure a charset whose input character set is 8bit but
+        # whose output character set is 7bit gets a transfer-encoding
+        # of 7bit.
+        eq = self.assertEqual
+        msg = MIMEText('\xca\xb8', _charset='euc-jp')
+        eq(msg['content-transfer-encoding'], '7bit')
 
 \f
 # Test long header wrapping
index 7147f775a33030fb15db8a09dc553b1068321db4..227ebff37a6e98eaa423e2291b94c795ba875318 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -40,6 +40,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #7472: Fixed typo in email.encoders module; messages using ISO-2022
+  character sets will now consistently use a Content-Transfer-Encoding of
+  7bit rather than sometimes being marked as 8bit.
+
 - Issue #4265: shutil.copyfile() was leaking file descriptors when disk fills.
   Patch by Tres Seaver.