From 50422b403c4ebea87f7af840e5c5cf147155639e Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 26 Apr 2000 20:34:28 +0000 Subject: 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. --- Modules/posixmodule.c | 19 ++++++++++++++++--- 1 file 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(); -- cgit v0.12