Kaydet (Commit) 6c14f231 authored tarafından Benjamin Peterson's avatar Benjamin Peterson

fix possible double free in TextIOWrapper.__init__ (closes #22849)

üst dfede95a
...@@ -2784,6 +2784,21 @@ class TextIOWrapperTest(unittest.TestCase): ...@@ -2784,6 +2784,21 @@ class TextIOWrapperTest(unittest.TestCase):
self.assertFalse(err) self.assertFalse(err)
self.assertEqual("ok", out.decode().strip()) self.assertEqual("ok", out.decode().strip())
def test_issue22849(self):
class F(object):
def readable(self): return True
def writable(self): return True
def seekable(self): return True
for i in range(10):
try:
self.TextIOWrapper(F(), encoding='utf-8')
except Exception:
pass
F.tell = lambda x: 0
t = self.TextIOWrapper(F(), encoding='utf-8')
class CTextIOWrapperTest(TextIOWrapperTest): class CTextIOWrapperTest(TextIOWrapperTest):
io = io io = io
......
...@@ -36,6 +36,8 @@ Core and Builtins ...@@ -36,6 +36,8 @@ Core and Builtins
Library Library
------- -------
- Issue #22849: Fix possible double free in the io.TextIOWrapper constructor.
- Issue #12728: Different Unicode characters having the same uppercase but - Issue #12728: Different Unicode characters having the same uppercase but
different lowercase are now matched in case-insensitive regular expressions. different lowercase are now matched in case-insensitive regular expressions.
......
...@@ -1061,7 +1061,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds) ...@@ -1061,7 +1061,7 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
} }
/* Finished sorting out the codec details */ /* Finished sorting out the codec details */
Py_DECREF(codec_info); Py_CLEAR(codec_info);
self->buffer = buffer; self->buffer = buffer;
Py_INCREF(buffer); Py_INCREF(buffer);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment