diff options
author | Guido van Rossum <guido@python.org> | 2000-04-26 20:34:28 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-04-26 20:34:28 (GMT) |
commit | 50422b403c4ebea87f7af840e5c5cf147155639e (patch) | |
tree | 835eded9710ea7fd84c529269ad1cf13beddeeaa /Modules | |
parent | 868b50af1710442a8f92b266ff507259bc09e7de (diff) | |
download | cpython-50422b403c4ebea87f7af840e5c5cf147155639e.zip cpython-50422b403c4ebea87f7af840e5c5cf147155639e.tar.gz cpython-50422b403c4ebea87f7af840e5c5cf147155639e.tar.bz2 |
Michael Hudson:
This patch changes posixmodule.c:execv to
a) check for zero length args (does this to execve, too), raising
ValueError.
b) raises more rational exceptions for various flavours of duff arguments.
I *hate*
TypeError: "illegal argument type for built-in operation"
It has to be one of the most frustrating error messages ever.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/posixmodule.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e269106..2c5274a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1343,8 +1343,12 @@ posix_execv(self, args) getitem = PyTuple_GetItem; } else { - badarg: - PyErr_BadArgument(); + PyErr_SetString(PyExc_TypeError, "argv must be tuple or list"); + return NULL; + } + + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, "empty argument list"); return NULL; } @@ -1354,7 +1358,10 @@ posix_execv(self, args) for (i = 0; i < argc; i++) { if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) { PyMem_DEL(argvlist); - goto badarg; + PyErr_SetString(PyExc_TypeError, + "all arguments must be strings"); + return NULL; + } } argvlist[argc] = NULL; @@ -1416,6 +1423,12 @@ posix_execve(self, args) return NULL; } + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, + "empty argument list"); + return NULL; + } + argvlist = PyMem_NEW(char *, argc+1); if (argvlist == NULL) { PyErr_NoMemory(); |