From: Serhiy Storchaka Date: Sat, 14 Dec 2013 17:18:39 +0000 (+0200) Subject: Issue #17919: Fixed integer overflow in the eventmask parameter. X-Git-Tag: v3.4.0b2~221 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=03241e801780edd967923d1cce00c2d07b208e58;p=thirdparty%2FPython%2Fcpython.git Issue #17919: Fixed integer overflow in the eventmask parameter. --- 03241e801780edd967923d1cce00c2d07b208e58 diff --cc Lib/test/test_devpoll.py index 40ebeee5975b,c7bacf89a215..bd0db6166455 --- a/Lib/test/test_devpoll.py +++ b/Lib/test/test_devpoll.py @@@ -91,36 -87,17 +91,47 @@@ class DevPollTests(unittest.TestCase) self.assertRaises(OverflowError, pollster.poll, 1 << 63) self.assertRaises(OverflowError, pollster.poll, 1 << 64) + def test_close(self): + open_file = open(__file__, "rb") + self.addCleanup(open_file.close) + fd = open_file.fileno() + devpoll = select.devpoll() + + # test fileno() method and closed attribute + self.assertIsInstance(devpoll.fileno(), int) + self.assertFalse(devpoll.closed) + + # test close() + devpoll.close() + self.assertTrue(devpoll.closed) + self.assertRaises(ValueError, devpoll.fileno) + + # close() can be called more than once + devpoll.close() + + # operations must fail with ValueError("I/O operation on closed ...") + self.assertRaises(ValueError, devpoll.modify, fd, select.POLLIN) + self.assertRaises(ValueError, devpoll.poll) + self.assertRaises(ValueError, devpoll.register, fd, fd, select.POLLIN) + self.assertRaises(ValueError, devpoll.unregister, fd) + + def test_fd_non_inheritable(self): + devpoll = select.devpoll() + self.addCleanup(devpoll.close) + self.assertEqual(os.get_inheritable(devpoll.fileno()), False) + + + def test_events_mask_overflow(self): + pollster = select.devpoll() + w, r = os.pipe() + pollster.register(w) + # Issue #17919 + self.assertRaises(OverflowError, pollster.register, 0, -1) + self.assertRaises(OverflowError, pollster.register, 0, USHRT_MAX + 1) + self.assertRaises(OverflowError, pollster.modify, 1, -1) + self.assertRaises(OverflowError, pollster.modify, 1, USHRT_MAX + 1) + + def test_main(): run_unittest(DevPollTests) diff --cc Lib/test/test_poll.py index 8138294164d7,3c86ef639f69..41ca803e4a24 --- a/Lib/test/test_poll.py +++ b/Lib/test/test_poll.py @@@ -1,10 -1,9 +1,10 @@@ # Test case for the os.poll() function import os +import subprocess import random import select - import _testcapi + from _testcapi import USHRT_MAX, INT_MAX, UINT_MAX try: import threading except ImportError: diff --cc Misc/NEWS index 93b9dd6884db,b5f1ece6a68c..95f77527884f --- a/Misc/NEWS +++ b/Misc/NEWS @@@ -44,10 -32,8 +44,11 @@@ Core and Builtin Library ------- +- Issue #19946: multiprocessing.spawn now raises ImportError when the module to + be used as the main module cannot be imported. + - - Issue #17919: select.poll.poll() again works with poll.POLLNVAL on AIX. + - Issue #17919: select.poll.register() again works with poll.POLLNVAL on AIX. + Fixed integer overflow in the eventmask parameter. - Issue #19063: if a Charset's body_encoding was set to None, the email package would generate a message claiming the Content-Transfer-Encoding diff --cc Modules/selectmodule.c index 1e7ba4c147e8,c492224ecbcf..0293c8b47b25 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@@ -728,14 -744,11 +746,14 @@@ static PyObject internal_devpoll_register(devpollObject *self, PyObject *args, int remove) { PyObject *o; - int fd, events = POLLIN | POLLPRI | POLLOUT; + int fd; + unsigned short events = POLLIN | POLLPRI | POLLOUT; + if (self->fd_devpoll < 0) + return devpoll_err_closed(); + - if (!PyArg_ParseTuple(args, "O|i:register", &o, &events)) { + if (!PyArg_ParseTuple(args, "O|O&:register", &o, ushort_converter, &events)) return NULL; - } fd = PyObject_AsFileDescriptor(o); if (fd == -1) return NULL;