diff options
author | Eric Blake <eblake@redhat.com> | 2009-11-16 20:05:49 +0000 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2009-11-16 20:05:49 +0000 |
commit | d01a44977f7f28ee5f3a2d14b01cf14690a5852e (patch) | |
tree | 4179a34665f3eaa51c0cc416f2cf540a58c5a137 | |
parent | 5074489a49be6c20689bd3b7b4b4d8c6ace28435 (diff) | |
download | newlib-d01a44977f7f28ee5f3a2d14b01cf14690a5852e.zip newlib-d01a44977f7f28ee5f3a2d14b01cf14690a5852e.tar.gz newlib-d01a44977f7f28ee5f3a2d14b01cf14690a5852e.tar.bz2 |
Fix setenv and unsetenv corner cases.
* environ.cc (setenv): Detect invalid argument.
(unsetenv): Distinguish EFAULT from EINVAL.
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/environ.cc | 13 |
2 files changed, 13 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d90598d..d03e047 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2009-11-16 Eric Blake <ebb9@byu.net> + + * environ.cc (setenv): Detect invalid argument. + (unsetenv): Distinguish EFAULT from EINVAL. + 2009-11-13 Corinna Vinschen <corinna@vinschen.de> * net.cc (fdsock): Fill _rmem and _wmem with valid values returned diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index bc11303..4935bc8 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -413,10 +413,11 @@ setenv (const char *name, const char *value, int overwrite) myfault efault; if (efault.faulted (EFAULT)) return -1; - if (!*name) - return 0; - if (*value == '=') - value++; + if (!name || !*name || strchr (name, '=')) + { + set_errno (EINVAL); + return -1; + } return _addenv (name, value, !!overwrite); } @@ -427,7 +428,9 @@ unsetenv (const char *name) register char **e; int offset; myfault efault; - if (efault.faulted () || *name == '\0' || strchr (name, '=')) + if (efault.faulted (EFAULT)) + return -1; + if (!name || *name == '\0' || strchr (name, '=')) { set_errno (EINVAL); return -1; |