From: Oren Milman Date: Tue, 7 Nov 2017 00:17:54 +0000 (+0200) Subject: [2.7] bpo-31271: Fix an assertion failure in io.TextIOWrapper.write. (GH-3201) (... X-Git-Tag: v2.7.15rc1~138 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30537698b607d53fa9ce18522abb88469d5814b6;p=thirdparty%2FPython%2Fcpython.git [2.7] bpo-31271: Fix an assertion failure in io.TextIOWrapper.write. (GH-3201) (#3951) --- diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 3dc6e9ffcac1..ea5ec656f755 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -2666,6 +2666,22 @@ class TextIOWrapperTest(unittest.TestCase): t = self.TextIOWrapper(NonbytesStream('a')) self.assertEqual(t.read(), u'a') + def test_illegal_encoder(self): + # bpo-31271: A TypeError should be raised in case the return value of + # encoder's encode() is invalid. + class BadEncoder: + def encode(self, dummy): + return u'spam' + def get_bad_encoder(dummy): + return BadEncoder() + rot13 = codecs.lookup("rot13") + with support.swap_attr(rot13, '_is_text_encoding', True), \ + support.swap_attr(rot13, 'incrementalencoder', get_bad_encoder): + t = io.TextIOWrapper(io.BytesIO(b'foo'), encoding="rot13") + with self.assertRaises(TypeError): + t.write('bar') + t.flush() + def test_illegal_decoder(self): # Issue #17106 # Bypass the early encoding check added in issue 20404