mirror of
https://github.com/python/cpython
synced 2024-09-19 23:31:41 +00:00
bpo-38031: Fix a possible assertion failure in _io.FileIO() (#GH-5688)
This commit is contained in:
parent
b1dcdefc3a
commit
d386115039
|
@ -888,6 +888,14 @@ def badopener(fname, flags):
|
|||
open('non-existent', 'r', opener=badopener)
|
||||
self.assertEqual(str(cm.exception), 'opener returned -2')
|
||||
|
||||
def test_opener_invalid_fd(self):
|
||||
# Check that OSError is raised with error code EBADF if the
|
||||
# opener returns an invalid file descriptor (see gh-82212).
|
||||
fd = os_helper.make_bad_fd()
|
||||
with self.assertRaises(OSError) as cm:
|
||||
self.open('foo', opener=lambda name, flags: fd)
|
||||
self.assertEqual(cm.exception.errno, errno.EBADF)
|
||||
|
||||
def test_fileio_closefd(self):
|
||||
# Issue #4841
|
||||
with self.open(__file__, 'rb') as f1, \
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix a possible assertion failure in :class:`io.FileIO` when the opener
|
||||
returns an invalid file descriptor.
|
|
@ -485,8 +485,12 @@ _io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode,
|
|||
ret = -1;
|
||||
if (!fd_is_own)
|
||||
self->fd = -1;
|
||||
if (self->fd >= 0)
|
||||
if (self->fd >= 0) {
|
||||
PyObject *exc, *val, *tb;
|
||||
PyErr_Fetch(&exc, &val, &tb);
|
||||
internal_close(self);
|
||||
_PyErr_ChainExceptions(exc, val, tb);
|
||||
}
|
||||
|
||||
done:
|
||||
#ifdef MS_WINDOWS
|
||||
|
|
Loading…
Reference in a new issue