On Sat, Jan 5, 2013 at 1:35 AM, David Michael <fedora.dm0@xxxxxxxxx> wrote: > It is possible for this pointer of the GIT_DIR environment variable to > survive unduplicated until further getenv calls are made. The standards > allow for subsequent calls of getenv to overwrite the string located at > its returned pointer, and this can result in broken git operations on > certain platforms. > > Signed-off-by: David Michael <fedora.dm0@xxxxxxxxx> > --- > > I have encountered an issue with consecutive calls to getenv > overwriting earlier values. Most notably, it prevents a plain "git > clone" from working. > > Long story short: This value of GIT_DIR gets passed around setup.c > until it reaches check_repository_format_gently. This function calls > git_config_early, which eventually runs getenv("HOME"). When it > returns back to check_repository_format_gently, the gitdir variable > contains my home directory path. The end result is that I wind up > with ~/objects/ etc. and a failed repository clone. (Simply adding a > bare getenv("GIT_DIR") afterwards to reset the pointer also corrects > the problem.) > > Since other platforms are apparently working, yet this getenv behavior > is supported by the standards, I am left wondering if this could be a > symptom of something else being broken on my platform (z/OS). Can > anyone more familiar with this part of git identify any condition that > obviously should not be occurring? > > Thanks. I have some patches of a similar nature here: https://github.com/kusma/git/commits/work/getenv-safety These were written for an earlier version of the UTF-8 patches for Git for Windows, where we were looking into allowing getenv to use a static buffer to convert the environment variables from UTF-16 (which is what Windows maintains) to UTF-8. We ended converting the environment on start-up instead, so these weren't needed for us. But perhaps they can be of use to someone else? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html