aboutsummaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2009-11-16 20:05:49 +0000
committerEric Blake <eblake@redhat.com>2009-11-16 20:05:49 +0000
commitd01a44977f7f28ee5f3a2d14b01cf14690a5852e (patch)
tree4179a34665f3eaa51c0cc416f2cf540a58c5a137 /winsup
parent5074489a49be6c20689bd3b7b4b4d8c6ace28435 (diff)
downloadnewlib-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.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/environ.cc13
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;