]> granicus.if.org Git - python/commitdiff
Michael Hudson:
authorGuido van Rossum <guido@python.org>
Wed, 26 Apr 2000 20:34:28 +0000 (20:34 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 26 Apr 2000 20:34:28 +0000 (20:34 +0000)
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

index e2691065bab5f354b77e5dcb74187ae06d827a8b..2c5274a71cdffcde010e8164e717297556fc22a7 100644 (file)
@@ -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();