Kaydet (Commit) 0bffc94d authored tarafından Victor Stinner's avatar Victor Stinner

Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a

ValueError on fstat() failure.
üst 38d773bd
...@@ -252,14 +252,14 @@ class WakeupFDTests(unittest.TestCase): ...@@ -252,14 +252,14 @@ class WakeupFDTests(unittest.TestCase):
def test_invalid_fd(self): def test_invalid_fd(self):
fd = support.make_bad_fd() fd = support.make_bad_fd()
self.assertRaises(ValueError, signal.set_wakeup_fd, fd) self.assertRaises(OSError, signal.set_wakeup_fd, fd)
def test_set_wakeup_fd_result(self): def test_set_wakeup_fd_result(self):
r1, w1 = os.pipe() r1, w1 = os.pipe()
os.close(r1) self.addCleanup(os.close, r1)
self.addCleanup(os.close, w1) self.addCleanup(os.close, w1)
r2, w2 = os.pipe() r2, w2 = os.pipe()
os.close(r2) self.addCleanup(os.close, r2)
self.addCleanup(os.close, w2) self.addCleanup(os.close, w2)
signal.set_wakeup_fd(w1) signal.set_wakeup_fd(w1)
......
...@@ -108,6 +108,9 @@ Core and Builtins ...@@ -108,6 +108,9 @@ Core and Builtins
Library Library
------- -------
- Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a
ValueError on ``fstat()`` failure.
- Issue #21044: tarfile.open() now handles fileobj with an integer 'name' - Issue #21044: tarfile.open() now handles fileobj with an integer 'name'
attribute. Based on patch by Martin Panter. attribute. Based on patch by Martin Panter.
......
...@@ -437,12 +437,20 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) ...@@ -437,12 +437,20 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
#endif #endif
if (fd != -1 && (!_PyVerify_fd(fd) || fstat(fd, &buf) != 0)) {
if (fd != -1) {
if (!_PyVerify_fd(fd)) {
PyErr_SetString(PyExc_ValueError, "invalid fd"); PyErr_SetString(PyExc_ValueError, "invalid fd");
return NULL; return NULL;
} }
if (fstat(fd, &buf) != 0)
return PyErr_SetFromErrno(PyExc_OSError);
}
old_fd = wakeup_fd; old_fd = wakeup_fd;
wakeup_fd = fd; wakeup_fd = fd;
return PyLong_FromLong(old_fd); return PyLong_FromLong(old_fd);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment