summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2016-11-20 03:17:26 (GMT)
committerSteve Dower <steve.dower@microsoft.com>2016-11-20 03:17:26 (GMT)
commitbce26262d1b4873e2f9a3da69f638ba56d36ce89 (patch)
treeee540766a873f9ba74f452c4c0c675299c7d36a0 /Modules
parent859fd7bd7af90ce9a7f3a3184f2fce83013e0a96 (diff)
parent93ff8725b3f678586fbbc19d3d4b615b218300ff (diff)
downloadcpython-bce26262d1b4873e2f9a3da69f638ba56d36ce89.zip
cpython-bce26262d1b4873e2f9a3da69f638ba56d36ce89.tar.gz
cpython-bce26262d1b4873e2f9a3da69f638ba56d36ce89.tar.bz2
Issue #28732: Raise ValueError when argv[0] is empty
Diffstat (limited to 'Modules')
-rw-r--r--Modules/posixmodule.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 0482f2b..acef3c3 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -4916,12 +4916,20 @@ os_execv_impl(PyObject *module, path_t *path, PyObject *argv)
if (argvlist == NULL) {
return NULL;
}
+ if (!argvlist[0][0]) {
+ PyErr_SetString(PyExc_ValueError,
+ "execv() arg 2 first element cannot be empty");
+ free_string_array(argvlist, argc);
+ return NULL;
+ }
+ _Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_WEXECV
_wexecv(path->wide, argvlist);
#else
execv(path->narrow, argvlist);
#endif
+ _Py_END_SUPPRESS_IPH
/* If we get here it's definitely an error */
@@ -4961,6 +4969,11 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env)
goto fail;
}
argc = PySequence_Size(argv);
+ if (argc < 1) {
+ PyErr_SetString(PyExc_ValueError, "execve: argv must not be empty");
+ return NULL;
+ }
+
if (!PyMapping_Check(env)) {
PyErr_SetString(PyExc_TypeError,
"execve: environment must be a mapping object");
@@ -4971,11 +4984,17 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env)
if (argvlist == NULL) {
goto fail;
}
+ if (!argvlist[0][0]) {
+ PyErr_SetString(PyExc_ValueError,
+ "execve: argv first element cannot be empty");
+ goto fail;
+ }
envlist = parse_envlist(env, &envc);
if (envlist == NULL)
goto fail;
+ _Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_FEXECVE
if (path->fd > -1)
fexecve(path->fd, argvlist, envlist);
@@ -4986,6 +5005,7 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env)
#else
execve(path->narrow, argvlist, envlist);
#endif
+ _Py_END_SUPPRESS_IPH
/* If we get here it's definitely an error */
@@ -5061,6 +5081,13 @@ os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv)
"spawnv() arg 2 must contain only strings");
return NULL;
}
+ if (i == 0 && !argvlist[0][0]) {
+ free_string_array(argvlist, i);
+ PyErr_SetString(
+ PyExc_ValueError,
+ "spawnv() arg 2 first element cannot be empty");
+ return NULL;
+ }
}
argvlist[argc] = NULL;
@@ -5155,6 +5182,13 @@ os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv,
lastarg = i;
goto fail_1;
}
+ if (i == 0 && !argvlist[0][0]) {
+ lastarg = i;
+ PyErr_SetString(
+ PyExc_ValueError,
+ "spawnv() arg 2 first element cannot be empty");
+ goto fail_1;
+ }
}
lastarg = argc;
argvlist[argc] = NULL;