Skip to content

Commit dacd3c1

Browse files
committed
preserve sign of IS_CLOSED(...)
1 parent 3dab11f commit dacd3c1

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

Lib/test/test_io/test_bufferedio.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,14 @@ def test_slow_close_from_thread(self):
922922
self.assertTrue(bufio.closed)
923923
t.join()
924924

925+
def test_close_without_closed(self):
926+
# gh-140650: check TypeError is raised
927+
class MockRawIOWithoutClosed(self.MockRawIO):
928+
closed = NotImplemented
929+
930+
bufio = self.tp(MockRawIOWithoutClosed())
931+
self.assertRaises(TypeError, bufio.close)
932+
925933

926934
class CBufferedWriterTest(BufferedWriterTest, SizeofTest, CTestCase):
927935
tp = io.BufferedWriter
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix an issue where :meth:`io.BufferedWriter.close` would crash when "closed"
2+
was not implemented.

Modules/_io/bufferedio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ _enter_buffered_busy(buffered *self)
362362
}
363363

364364
#define IS_CLOSED(self) \
365-
(!self->buffer || \
365+
(!self->buffer ?: \
366366
(self->fast_closed_checks \
367367
? _PyFileIO_closed(self->raw) \
368368
: buffered_closed(self)))

0 commit comments

Comments
 (0)