Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit df32b39

Browse files
committed
Issue #4237: io.FileIO() was raising invalid warnings caused by insufficient initialization of PyFileIOObject struct members.
1 parent fec925b commit df32b39

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

Lib/test/test_io.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,6 +1237,13 @@ def testImport__all__(self):
12371237
else:
12381238
self.assert_(issubclass(obj, io.IOBase))
12391239

1240+
def test_fileio_warnings(self):
1241+
with support.check_warnings() as w:
1242+
self.assertEqual(w.warnings, [])
1243+
self.assertRaises(TypeError, io.FileIO, [])
1244+
self.assertEqual(w.warnings, [])
1245+
self.assertRaises(ValueError, io.FileIO, "/some/invalid/name", "rt")
1246+
self.assertEqual(w.warnings, [])
12401247

12411248
def test_main():
12421249
support.run_unittest(IOTest, BytesIOTest, StringIOTest,

Modules/_fileio.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kews)
8686
self = (PyFileIOObject *) type->tp_alloc(type, 0);
8787
if (self != NULL) {
8888
self->fd = -1;
89+
self->readable = 0;
90+
self->writable = 0;
91+
self->seekable = -1;
92+
self->closefd = 1;
8993
self->weakreflist = NULL;
9094
}
9195

@@ -179,8 +183,6 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
179183
}
180184
}
181185

182-
self->readable = self->writable = 0;
183-
self->seekable = -1;
184186
s = mode;
185187
while (*s) {
186188
switch (*s++) {

0 commit comments

Comments
 (0)