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
/*