From: Todd C. Miller Date: Tue, 29 Jun 2010 13:09:20 +0000 (-0400) Subject: In unsetenv() check for NULL or empty name as per POSIX 1003.1-2008 X-Git-Tag: SUDO_1_7_3~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=96dc0e038611d70d0c625b71d20dda529c3a776e;p=sudo In unsetenv() check for NULL or empty name as per POSIX 1003.1-2008 --HG-- branch : 1.7 --- diff --git a/env.c b/env.c index 0ebd593b5..80fa45b37 100644 --- 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");