bpo-38031: Fix a possible assertion failure in _io.FileIO() (#GH-5688)

This commit is contained in:
Zackery Spytz 2022-11-25 04:55:26 -08:00 committed by GitHub
parent b1dcdefc3a
commit d386115039
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View file

@ -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, \

View file

@ -0,0 +1,2 @@
Fix a possible assertion failure in :class:`io.FileIO` when the opener
returns an invalid file descriptor.

View file

@ -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