diff options
-rw-r--r-- | Lib/test/test_codecs.py | 9 | ||||
-rw-r--r-- | Modules/_codecsmodule.c | 4 |
2 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 36cebd5..9a4f35f 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -27,11 +27,20 @@ class EscapeDecodeTest(unittest.TestCase): def test_empty_escape_decode(self): self.assertEquals(codecs.escape_decode(""), ("", 0)) +class RecodingTest(unittest.TestCase): + def test_recoding(self): + f = StringIO.StringIO() + f2 = codecs.EncodedFile(f, "unicode_internal", "utf-8") + f2.write(u"a") + f2.close() + # Python used to crash on this at exit because of a refcount + # bug in _codecsmodule.c def test_main(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(UTF16Test)) suite.addTest(unittest.makeSuite(EscapeDecodeTest)) + suite.addTest(unittest.makeSuite(RecodingTest)) test_support.run_suite(suite) diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index cd19ab5..210be51 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -167,8 +167,10 @@ unicode_internal_decode(PyObject *self, &obj, &errors)) return NULL; - if (PyUnicode_Check(obj)) + if (PyUnicode_Check(obj)) { + Py_INCREF(obj); return codec_tuple(obj, PyUnicode_GET_SIZE(obj)); + } else { if (PyObject_AsReadBuffer(obj, (const void **)&data, &size)) return NULL; |