diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2006-12-30 21:55:22 -0500 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-30 22:22:14 -0800 |
commit | 95d3c4f546c664c3571dd4a93f11ae2f54e55e6e (patch) | |
tree | 47ecc50397a10256e9f27921bffa2689cdf51343 /run-command.c | |
parent | cd83c74cb3161a19b5efd33f40cfe378c2f64ddb (diff) | |
download | git-95d3c4f546c664c3571dd4a93f11ae2f54e55e6e.tar.gz git-95d3c4f546c664c3571dd4a93f11ae2f54e55e6e.tar.xz |
Use /dev/null for update hook stdin.
Currently the update hook invoked by receive-pack has its stdin
connected to the pushing client. The hook shouldn't attempt to
read from this stream, and doing so may consume data that was
meant for receive-pack. Instead we should give the update hook
/dev/null as its stdin, ensuring that it always receives EOF and
doesn't disrupt the protocol if it attempts to read any data.
The post-update hook is similar, as it gets invoked with /dev/null
on stdin to prevent the hook from reading data from the client.
Previously we had invoked it with stdout also connected to /dev/null,
throwing away anything on stdout, to prevent client protocol errors.
Instead we should redirect stdout to stderr, like we do with the
update hook.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'run-command.c')
-rw-r--r-- | run-command.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/run-command.c b/run-command.c index 7e4ca43c6..cfbad74d1 100644 --- a/run-command.c +++ b/run-command.c @@ -9,12 +9,12 @@ int run_command_v_opt(const char **argv, int flags) if (pid < 0) return -ERR_RUN_COMMAND_FORK; if (!pid) { - if (flags & RUN_COMMAND_NO_STDIO) { + if (flags & RUN_COMMAND_NO_STDIN) { int fd = open("/dev/null", O_RDWR); dup2(fd, 0); - dup2(fd, 1); close(fd); - } else if (flags & RUN_COMMAND_STDOUT_TO_STDERR) + } + if (flags & RUN_COMMAND_STDOUT_TO_STDERR) dup2(2, 1); if (flags & RUN_GIT_CMD) { execv_git_cmd(argv); |