summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_select.py1
-rw-r--r--Misc/NEWS4
-rw-r--r--Modules/selectmodule.c5
3 files changed, 10 insertions, 0 deletions
diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py
index fe92f45..4a13ade 100644
--- a/Lib/test/test_select.py
+++ b/Lib/test/test_select.py
@@ -20,6 +20,7 @@ class SelectTestCase(unittest.TestCase):
self.assertRaises(TypeError, select.select, [self.Nope()], [], [])
self.assertRaises(TypeError, select.select, [self.Almost()], [], [])
self.assertRaises(TypeError, select.select, [], [], [], "not a number")
+ self.assertRaises(ValueError, select.select, [], [], [], -1)
def test_returned_list_identity(self):
# See issue #8329
diff --git a/Misc/NEWS b/Misc/NEWS
index 2b43122..95e5446 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -103,6 +103,10 @@ Core and Builtins
Library
-------
+- Issue #11757: select.select() now raises ValueError when a negative timeout
+ is passed (previously, a select.error with EINVAL would be raised). Patch
+ by Charles-François Natali.
+
- Issue #7311: fix html.parser to accept non-ASCII attribute values.
- Issue #11605: email.parser.BytesFeedParser was incorrectly converting multipart
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 65e1826..5aa67dd 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -234,6 +234,11 @@ select_select(PyObject *self, PyObject *args)
"timeout period too long");
return NULL;
}
+ if (timeout < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "timeout must be non-negative");
+ return NULL;
+ }
seconds = (long)timeout;
timeout = timeout - (double)seconds;
tv.tv_sec = seconds;