Fix for [ 543344 ] Interpreter crashes when recoding; suggested
authorMarc-André Lemburg <mal@egenix.com>
Tue, 4 Feb 2003 19:35:03 +0000 (19:35 +0000)
committerMarc-André Lemburg <mal@egenix.com>
Tue, 4 Feb 2003 19:35:03 +0000 (19:35 +0000)
by Michael Stone (mbrierst).

Python 2.1.4, 2.2.2 candidate.

Lib/test/test_codecs.py
Modules/_codecsmodule.c

index 36cebd55359a351bd581048e78b232de152bf38b..9a4f35f2166608aa9dd73105f533b9801b67cd27 100644 (file)
@@ -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)
 
 
index cd19ab595468f2e22b1794a8c1c7f241c5000df8..210be516f949254ec32efc51cf4f9e65334f91fc 100644 (file)
@@ -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;