summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_codecs.py9
-rw-r--r--Modules/_codecsmodule.c4
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;