fix failure to check malloc result in setenv
authorRich Felker <dalias@aerifal.cx>
Fri, 4 Oct 2013 19:49:55 +0000 (15:49 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 4 Oct 2013 19:49:55 +0000 (15:49 -0400)
src/env/setenv.c

index c2c2544..0a45896 100644 (file)
@@ -18,14 +18,14 @@ int setenv(const char *var, const char *value, int overwrite)
        l1 = strlen(var);
        l2 = strlen(value);
        s = malloc(l1+l2+2);
-       memcpy(s, var, l1);
-       s[l1] = '=';
-       memcpy(s+l1+1, value, l2);
-       s[l1+l2+1] = 0;
-       if (__putenv(s, 1)) {
-               free(s);
-               errno = ENOMEM;
-               return -1;
+       if (s) {
+               memcpy(s, var, l1);
+               s[l1] = '=';
+               memcpy(s+l1+1, value, l2);
+               s[l1+l2+1] = 0;
+               if (!__putenv(s, 1)) return 0;
        }
-       return 0;
+       free(s);
+       errno = ENOMEM;
+       return -1;
 }