(original) (raw)

changeset: 81568:2adc83b4738f branch: 3.3 parent: 81566:cd54b48946ca user: Benjamin Peterson benjamin@python.org date: Fri Jan 18 00:10:24 2013 -0500 files: Lib/test/test_signal.py Misc/NEWS Modules/signalmodule.c description: check windows fd validity (closes #16992) diff -r cd54b48946ca -r 2adc83b4738f Lib/test/test_signal.py --- a/Lib/test/test_signal.py Thu Jan 17 23:29:54 2013 +0100 +++ b/Lib/test/test_signal.py Fri Jan 18 00:10:24 2013 -0500 @@ -222,6 +222,13 @@ signal.signal(7, handler) +class WakeupFDTests(unittest.TestCase): + + def test_invalid_fd(self): + fd = support.make_bad_fd() + self.assertRaises(ValueError, signal.set_wakeup_fd, fd) + + @unittest.skipIf(sys.platform == "win32", "Not valid on Windows") class WakeupSignalTests(unittest.TestCase): def check_wakeup(self, test_body, *signals, ordered=True): @@ -864,8 +871,8 @@ def test_main(): try: support.run_unittest(PosixTests, InterProcessSignalTests, - WakeupSignalTests, SiginterruptTest, - ItimerTest, WindowsSignalTests, + WakeupFDTests, WakeupSignalTests, + SiginterruptTest, ItimerTest, WindowsSignalTests, PendingSignalsTests) finally: support.reap_children() diff -r cd54b48946ca -r 2adc83b4738f Misc/NEWS --- a/Misc/NEWS Thu Jan 17 23:29:54 2013 +0100 +++ b/Misc/NEWS Fri Jan 18 00:10:24 2013 -0500 @@ -150,6 +150,9 @@ Library ------- +- Issue #16992: On Windows in signal.set_wakeup_fd, validate the file + descriptor argument. + - Issue #16422: For compatibility with the Python version, the C version of decimal now uses strings instead of integers for rounding mode constants. diff -r cd54b48946ca -r 2adc83b4738f Modules/signalmodule.c --- a/Modules/signalmodule.c Thu Jan 17 23:29:54 2013 +0100 +++ b/Modules/signalmodule.c Fri Jan 18 00:10:24 2013 -0500 @@ -427,7 +427,7 @@ return NULL; } #endif - if (fd != -1 && fstat(fd, &buf) != 0) { + if (fd != -1 && (!_PyVerify_fd(fd) || fstat(fd, &buf) != 0)) { PyErr_SetString(PyExc_ValueError, "invalid fd"); return NULL; } /benjamin@python.org