git: ensure 0/1/2 are open in main()

Not having an open FD in the 0--2 range can lead to strange results, for example, a subsequent open() may return 2 (stderr) and then a die() would clobber this file. git-daemon and git-shell already guarded against this, but apparently users also manage to trip over it in other git commands. So we call sanitize_stdfds() during main git startup. Since these FDs are inherited, this covers all use of 'git foo ...', and all internal C commands when called directly. It does not fix shell/perl commands called directly. Signed-off-by: Thomas Rast <trast@inf.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Thomas Rast committed Jul 16, 2013 at 11:27 UTC a11c39646c14600d588ca55fcfe3c244b66047c7
1 file changed +7
git.c
+7
@@ -505,6 +505,13 @@ int main(int argc, const char **argv)
505 if (!cmd)
506 cmd = "git-help";
507
508 + /*
509 + * Always open file descriptors 0/1/2 to avoid clobbering files
510 + * in die(). It also avoids messing up when the pipes are dup'ed
511 + * onto stdin/stdout/stderr in the child processes we spawn.
512 + */
513 + sanitize_stdfds();
514 +
515 git_setup_gettext();
516
517 /*