git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] MSVC: Use _putenv instead of putenv to prevent a crash

From
Vincent van Ravesteijn <vfr@lyx.org>
Date
Nov 19, 2011, 13:52 UTC
Message-ID
<1321710745-2341-1-git-send-email-vfr@lyx.org>
In-Reply-To
<1321710345-2299-1-git-send-email-vfr@lyx.org>

Git crashes when trying to clear a nonexistent environment variable using the putenv function. The crash occurs when freeing the option string. In debug mode the assert "CrtIsValidHeapPointer" fails.

Using _putenv instead of putenv makes the crash and assert disappear.
Signed-off-by: Vincent van Ravesteijn <vfr@lyx.org>
---
The strange thing is that all over the internet people are claiming
that there is no difference between putenv and _putenv. Still, using
_putenv fixes the crash for me. 

If there is someone around who is more knowledgeable in this area, please comment.

 compat/setenv.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/compat/setenv.c b/compat/setenv.c
index 3a22ea7..b23937d 100644
--- a/compat/setenv.c
+++ b/compat/setenv.c
@@ -23,7 +23,7 @@ int gitsetenv(const char *name, const char *value, int replace)
 	memcpy(envstr + namelen + 1, value, valuelen);
 	envstr[namelen + valuelen + 1] = 0;
 
-	out = putenv(envstr);
+	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
-- 
1.7.4.1
Previous: Vincent van RavesteijnNext: Andreas Schwab
Message 2 of 14 in “MSVC: Do not close stdout to prevent a crash”
  1. 1/2 MSVC: Do not close stdout to prevent a crashVincent van Ravesteijn, Nov 19, 2011
  2. 2/2 MSVC: Use _putenv instead of putenv to prevent a crashVincent van Ravesteijn, Nov 19, 2011
  3. Andreas SchwabNov 19, 2011
  4. Junio C HamanoNov 19, 2011
  5. Andreas SchwabNov 19, 2011
  6. Junio C HamanoNov 20, 2011
  7. Andreas SchwabNov 20, 2011
  8. Johannes SixtNov 20, 2011
  9. Junio C HamanoNov 20, 2011
  10. Vincent van RavesteijnNov 19, 2011
  11. Johannes SixtNov 19, 2011
  12. Vincent van RavesteijnNov 22, 2011
  13. Johannes SixtNov 22, 2011
  14. Vincent van RavesteijnNov 22, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.