diff --git a/compat/setenv.c b/compat/setenv.c
index 94acd2da9e2e95f9f9a72061d9575de6079dcaec..3a22ea7b751efb768d72afa2f97fd963e10eec7e 100644 (file)
--- a/compat/setenv.c
+++ b/compat/setenv.c
-#include <stdlib.h>
-#include <string.h>
+#include "../git-compat-util.h"
int gitsetenv(const char *name, const char *value, int replace)
{
namelen = strlen(name);
valuelen = strlen(value);
- envstr = malloc((namelen + valuelen + 2) * sizeof(char));
+ envstr = malloc((namelen + valuelen + 2));
if (!envstr) return -1;
memcpy(envstr, name, namelen);
envstr[namelen + valuelen + 1] = 0;
out = putenv(envstr);
+ /* putenv(3) makes the argument string part of the environment,
+ * and changing that string modifies the environment --- which
+ * means we do not own that storage anymore. Do not free
+ * envstr.
+ */
- free(envstr);
return out;
}