Skip to content

Commit 75a219e

Browse files
author
evanWang1409
committed
bpo-41352: Raise UnsupportedOperation for FileIO.readall() in "w" mode
check self->readable added tests for FileIO.read and FileIO.readall
1 parent 5a2bac7 commit 75a219e

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

Lib/test/test_fileio.py

+18
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,24 @@ def testBlksize(self):
7373
blksize = getattr(fst, 'st_blksize', blksize)
7474
self.assertEqual(self.f._blksize, blksize)
7575

76+
def testReadWithWritingMode(self):
77+
r, w = os.pipe()
78+
w = os.fdopen(w, "w")
79+
w.write("hello")
80+
w.close()
81+
with io.FileIO(r, mode="w") as f:
82+
with self.assertRaises(_io.UnsupportedOperation):
83+
f.read()
84+
85+
def testReadallWithWritingMode(self):
86+
r, w = os.pipe()
87+
w = os.fdopen(w, "w")
88+
w.write("hello")
89+
w.close()
90+
with io.FileIO(r, mode="w") as f:
91+
with self.assertRaises(_io.UnsupportedOperation):
92+
f.readall()
93+
7694
# verify readinto
7795
def testReadintoByteArray(self):
7896
self.f.write(bytes([1, 2, 0, 255]))

Modules/_io/fileio.c

+2
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,8 @@ _io_FileIO_readall_impl(fileio *self)
699699

700700
if (self->fd < 0)
701701
return err_closed();
702+
if (!self->readable)
703+
return err_mode("reading");
702704

703705
Py_BEGIN_ALLOW_THREADS
704706
_Py_BEGIN_SUPPRESS_IPH

0 commit comments

Comments
 (0)