From a11c39646c14600d588ca55fcfe3c244b66047c7 Mon Sep 17 00:00:00 2001 From: Thomas Rast Date: Tue, 16 Jul 2013 11:27:37 +0200 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- git.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/git.c b/git.c index c598dc6367..02b4b140ae 100644 --- a/git.c +++ b/git.c @@ -505,6 +505,13 @@ int main(int argc, const char **argv) if (!cmd) cmd = "git-help"; + /* + * Always open file descriptors 0/1/2 to avoid clobbering files + * in die(). It also avoids messing up when the pipes are dup'ed + * onto stdin/stdout/stderr in the child processes we spawn. + */ + sanitize_stdfds(); + git_setup_gettext(); /* -- 2.11.4.GIT