From: Steve Dower Date: Sun, 20 Nov 2016 02:53:19 +0000 (-0800) Subject: Issue #28732: Raise ValueError when os.spawn*() is passed an empty tuple of arguments X-Git-Tag: v3.6.0b4~51 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=859fd7bd7af90ce9a7f3a3184f2fce83013e0a96;p=thirdparty%2FPython%2Fcpython.git Issue #28732: Raise ValueError when os.spawn*() is passed an empty tuple of arguments --- diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index b3d0b1e1c38c..9194a8a2beb3 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -2321,6 +2321,27 @@ class SpawnTests(unittest.TestCase): exitcode = os.spawnve(os.P_WAIT, args[0], args, self.env) self.assertEqual(exitcode, self.exitcode) + @requires_os_func('spawnl') + def test_spawnl_noargs(self): + args = self.create_args() + self.assertRaises(ValueError, os.spawnl, os.P_NOWAIT, args[0]) + + @requires_os_func('spawnle') + def test_spawnl_noargs(self): + args = self.create_args() + self.assertRaises(ValueError, os.spawnle, os.P_NOWAIT, args[0], {}) + + @requires_os_func('spawnv') + def test_spawnv_noargs(self): + args = self.create_args() + self.assertRaises(ValueError, os.spawnv, os.P_NOWAIT, args[0], ()) + self.assertRaises(ValueError, os.spawnv, os.P_NOWAIT, args[0], []) + + @requires_os_func('spawnve') + def test_spawnv_noargs(self): + args = self.create_args() + self.assertRaises(ValueError, os.spawnve, os.P_NOWAIT, args[0], (), {}) + self.assertRaises(ValueError, os.spawnve, os.P_NOWAIT, args[0], [], {}) # The introduction of this TestCase caused at least two different errors on # *nix buildbots. Temporarily skip this to let the buildbots move along. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a89da7091bb2..0482f2bbd034 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5042,6 +5042,11 @@ os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv) "spawnv() arg 2 must be a tuple or list"); return NULL; } + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, + "spawnv() arg 2 cannot be empty"); + return NULL; + } argvlist = PyMem_NEW(EXECV_CHAR *, argc+1); if (argvlist == NULL) { @@ -5127,6 +5132,11 @@ os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv, "spawnve() arg 2 must be a tuple or list"); goto fail_0; } + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, + "spawnve() arg 2 cannot be empty"); + goto fail_0; + } if (!PyMapping_Check(env)) { PyErr_SetString(PyExc_TypeError, "spawnve() arg 3 must be a mapping object");