summaryrefslogtreecommitdiff
path: root/git.c
diff options
context:
space:
mode:
authorThomas Rast <trast@inf.ethz.ch>2013-07-16 09:27:37 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-07-17 19:52:16 (GMT)
commita11c39646c14600d588ca55fcfe3c244b66047c7 (patch)
tree5c5a678b24661d57c5ab1890096cb35129d6862a /git.c
parent1d999ddd1daa6da2779d21b293ea9b275780bff8 (diff)
downloadgit-a11c39646c14600d588ca55fcfe3c244b66047c7.zip
git-a11c39646c14600d588ca55fcfe3c244b66047c7.tar.gz
git-a11c39646c14600d588ca55fcfe3c244b66047c7.tar.bz2
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>
Diffstat (limited to 'git.c')
-rw-r--r--git.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/git.c b/git.c
index c598dc6..02b4b14 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();
/*