OSDN Git Service

Fix setenv and unsetenv corner cases.
authorericb <ericb>
Tue, 17 Nov 2009 05:05:49 +0000 (05:05 +0000)
committerericb <ericb>
Tue, 17 Nov 2009 05:05:49 +0000 (05:05 +0000)
* environ.cc (setenv): Detect invalid argument.
(unsetenv): Distinguish EFAULT from EINVAL.

winsup/cygwin/ChangeLog
winsup/cygwin/environ.cc

index d90598d..d03e047 100644 (file)
@@ -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
index bc11303..4935bc8 100644 (file)
@@ -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;