]> granicus.if.org Git - sudo/commitdiff
In unsetenv() check for NULL or empty name as per POSIX 1003.1-2008
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 29 Jun 2010 13:09:20 +0000 (09:09 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 29 Jun 2010 13:09:20 +0000 (09:09 -0400)
--HG--
branch : 1.7

env.c

diff --git a/env.c b/env.c
index 0ebd593b5966d2bb47aa278fbaf98ba7b15b07e5..80fa45b379ed3a08cd7049805f272415089cd915 100644 (file)
--- a/env.c
+++ b/env.c
@@ -306,14 +306,14 @@ setenv(var, val, overwrite)
     const char *cp;
     size_t esize;
 
-    if (env.envp == NULL)
-       env_init(TRUE);
-
     if (!var || *var == '\0') {
        errno = EINVAL;
        return(-1);
     }
 
+    if (env.envp == NULL)
+       env_init(TRUE);
+
     /*
      * POSIX says a var name with '=' is an error but BSD
      * just ignores the '=' and anything after it.
@@ -358,10 +358,7 @@ unsetenv(var)
     char **ep;
     size_t len;
 
-    if (env.envp == NULL)
-       env_init(TRUE);
-
-    if (strchr(var, '=') != NULL) {
+    if (var == NULL || *var == '\0' || strchr(var, '=') != NULL) {
        errno = EINVAL;
 #ifdef UNSETENV_VOID
        return;
@@ -370,6 +367,9 @@ unsetenv(var)
 #endif
     }
 
+    if (env.envp == NULL)
+       env_init(TRUE);
+
 #ifdef ENV_DEBUG
     if (env.envp[env.env_len] != NULL)
        errorx(1, "unsetenv: corrupted envp, len mismatch");