[Python-checkins] r70721 - in python/branches/release26-maint: Lib/test/test_multiprocessing.py Misc/NEWS Modules/_multiprocessing/connection.h Modules/_multiprocessing/socket_connection.c

jesse.noller python-checkins at python.org
Mon Mar 30 18:11:17 CEST 2009


Author: jesse.noller
Date: Mon Mar 30 18:11:16 2009
New Revision: 70721
Log:
Merge 68768 to maint
Modified:
 python/branches/release26-maint/ (props changed)
 python/branches/release26-maint/Lib/test/test_multiprocessing.py
 python/branches/release26-maint/Misc/NEWS
 python/branches/release26-maint/Modules/_multiprocessing/connection.h
 python/branches/release26-maint/Modules/_multiprocessing/socket_connection.c
Modified: python/branches/release26-maint/Lib/test/test_multiprocessing.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_multiprocessing.py	(original)
+++ python/branches/release26-maint/Lib/test/test_multiprocessing.py	Mon Mar 30 18:11:16 2009
@@ -61,6 +61,8 @@
 HAVE_GETVALUE = not getattr(_multiprocessing,
 'HAVE_BROKEN_SEM_GETVALUE', False)
 
+WIN32 = (sys.platform == "win32")
+
 #
 # Creates a wrapper for a function which records the time it takes to finish
 #
@@ -1682,6 +1684,18 @@
 logger.setLevel(level=LOG_LEVEL)
 
 #
+# Test to verify handle verification, see issue 3321
+#
+
+class TestInvalidHandle(unittest.TestCase):
+
+ def test_invalid_handles(self):
+ if WIN32:
+ return
+ conn = _multiprocessing.Connection(44977608)
+ self.assertRaises(IOError, conn.poll)
+ self.assertRaises(IOError, _multiprocessing.Connection, -1)
+#
 # Functions used to create test cases from the base ones in this module
 #
 
@@ -1785,7 +1799,7 @@
 multiprocessing.connection.answer_challenge,
 _FakeConnection(), b'abc')
 
-testcases_other = [OtherTest]
+testcases_other = [OtherTest, TestInvalidHandle]
 
 #
 #
Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Mon Mar 30 18:11:16 2009
@@ -150,6 +150,13 @@
 - Issue #5203: Fixed ctypes segfaults when passing a unicode string to a
 function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).
 
+- Issue #3321: _multiprocessing.Connection() doesn't check handle; added checks
+ for *nix machines for negative handles and large int handles. Without this check
+ it is possible to segfault the interpreter.
+
+- Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying issue
+ in sharedctypes.py.
+
 - Issue #3386: distutils.sysconfig.get_python_lib prefix argument was ignored
 under NT and OS2. Patch by Philip Jenvey.
 
Modified: python/branches/release26-maint/Modules/_multiprocessing/connection.h
==============================================================================
--- python/branches/release26-maint/Modules/_multiprocessing/connection.h	(original)
+++ python/branches/release26-maint/Modules/_multiprocessing/connection.h	Mon Mar 30 18:11:16 2009
@@ -354,7 +354,7 @@
 	}
 
 	Py_BEGIN_ALLOW_THREADS
-	res = conn_poll(self, timeout);
+	res = conn_poll(self, timeout, _save);
 	Py_END_ALLOW_THREADS
 
 	switch (res) {
Modified: python/branches/release26-maint/Modules/_multiprocessing/socket_connection.c
==============================================================================
--- python/branches/release26-maint/Modules/_multiprocessing/socket_connection.c	(original)
+++ python/branches/release26-maint/Modules/_multiprocessing/socket_connection.c	Mon Mar 30 18:11:16 2009
@@ -153,11 +153,23 @@
 */
 
 static int
-conn_poll(ConnectionObject *conn, double timeout)
+conn_poll(ConnectionObject *conn, double timeout, PyThreadState *_save)
 {
 	int res;
 	fd_set rfds;
 
+	/*
+	 * Verify the handle, issue 3321. Not required for windows.
+	 */ 
+	#ifndef MS_WINDOWS
+		if (((int)conn->handle) < 0 || ((int)conn->handle) >= FD_SETSIZE) {
+			Py_BLOCK_THREADS
+			PyErr_SetString(PyExc_IOError, "handle out of range in select()");
+			Py_UNBLOCK_THREADS
+			return MP_EXCEPTION_HAS_BEEN_SET;
+		}
+	#endif
+
 	FD_ZERO(&rfds);
 	FD_SET((SOCKET)conn->handle, &rfds);
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /