mirror of
https://github.com/python/cpython.git
synced 2026-01-03 14:02:21 +00:00
[3.13] gh-142594: fix by property calls io.TextIOWrapper.detach (GH-142706) (GH-142757)
(cherry picked from commit 1d3854a19a)
Signed-off-by: yihong0618 <zouzou0208@gmail.com>
Co-authored-by: yihong <zouzou0208@gmail.com>
This commit is contained in:
parent
3e45440382
commit
affd2f2ff2
3 changed files with 21 additions and 0 deletions
|
|
@ -4160,6 +4160,22 @@ def write(self, data):
|
|||
self.assertEqual([b"abcdef", b"middle", b"g"*chunk_size],
|
||||
buf._write_stack)
|
||||
|
||||
def test_issue142594(self):
|
||||
wrapper = None
|
||||
detached = False
|
||||
class ReentrantRawIO(self.RawIOBase):
|
||||
@property
|
||||
def closed(self):
|
||||
nonlocal detached
|
||||
if wrapper is not None and not detached:
|
||||
detached = True
|
||||
wrapper.detach()
|
||||
return False
|
||||
|
||||
raw = ReentrantRawIO()
|
||||
wrapper = self.TextIOWrapper(raw)
|
||||
wrapper.close() # should not crash
|
||||
|
||||
|
||||
class PyTextIOWrapperTest(TextIOWrapperTest):
|
||||
io = pyio
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
Fix crash in ``TextIOWrapper.close()`` when the underlying buffer's
|
||||
``closed`` property calls :meth:`~io.TextIOBase.detach`.
|
||||
|
|
@ -3133,6 +3133,9 @@ _io_TextIOWrapper_close_impl(textio *self)
|
|||
if (r > 0) {
|
||||
Py_RETURN_NONE; /* stream already closed */
|
||||
}
|
||||
if (self->detached) {
|
||||
Py_RETURN_NONE; /* gh-142594 null pointer issue */
|
||||
}
|
||||
else {
|
||||
PyObject *exc = NULL;
|
||||
if (self->finalizing) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue