From: Johannes Sixt <j.sixt@viscovery.net>
To: Paolo Bonzini <bonzini@gnu.org>
Cc: Karl Chen <quarl@cs.berkeley.edu>,
Git mailing list <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2] fix start_command() bug when stdin is closed
Date: Mon, 25 Aug 2008 15:12:34 +0200 [thread overview]
Message-ID: <48B2AFC2.20901@viscovery.net> (raw)
In-Reply-To: <E1KXawS-0001gg-Ty@fencepost.gnu.org>
Paolo Bonzini schrieb:
> There is a problem in the use of dup2+close in start_command()
> when one or more of file descriptors 0/1/2 are closed.
"Karl Chen pointed out a problem..." (just to give due credit).
> int start_command(struct child_process *cmd)
> {
> int need_in, need_out, need_err;
> int fdin[2], fdout[2], fderr[2];
>
> /*
> + * Make sure that all file descriptors <= 2 are open, otherwise we
> + * mess them up when dup'ing pipes onto stdin/stdout/stderr. Since
> + * we are at it, open a file descriptor on /dev/null to use it later.
> + */
> + if (devnull_fd == -1)
> + {
> + devnull_fd = open("/dev/null", O_RDWR);
> + while (devnull_fd >= 0 && devnull_fd <= 2)
> + devnull_fd = dup(devnull_fd);
> + if (devnull_fd == -1)
> + die("opening /dev/null failed (%s)", strerror(errno));
> + }
Except for the insane GNU style indentation ;-) this makes a lot of sense.
Acked-by: Johannes Sixt <johannes.sixt@telecom.at>
The changes to the MINGW32 section are good (they pass the test suite).
Thanks for taking care of that.
-- Hannes
next prev parent reply other threads:[~2008-08-25 13:13 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-25 8:28 [PATCH] Fix start_command() pipe bug when stdin is closed Karl Chen
2008-08-25 10:44 ` Johannes Sixt
2008-08-25 11:49 ` Paolo Bonzini
2008-08-25 12:00 ` [PATCH v2] fix start_command() " Paolo Bonzini
2008-08-25 13:12 ` Johannes Sixt [this message]
2008-08-25 13:37 ` [PATCH v2 properly indented] " Paolo Bonzini
2008-08-25 16:00 ` Karl Chen
2008-08-26 0:06 ` Junio C Hamano
2008-08-26 6:09 ` Junio C Hamano
2008-08-26 6:33 ` Johannes Sixt
2008-08-26 6:45 ` Paolo Bonzini
2008-08-26 6:48 ` [PATCH] be paranoid about closed stdin/stdout/stderr Paolo Bonzini
2008-08-26 6:57 ` Johannes Sixt
2008-08-26 7:40 ` Stephen R. van den Berg
2008-08-27 5:01 ` Avery Pennarun
2008-08-27 9:18 ` Stephen R. van den Berg
2008-08-27 12:36 ` Paolo Bonzini
2008-08-27 15:20 ` [PATCH v4] make git-shell " Paolo Bonzini
2008-08-27 17:22 ` Stephen R. van den Berg
2008-08-27 17:27 ` [PATCH] be " Junio C Hamano
2008-08-28 13:17 ` Paolo Bonzini
2008-08-28 13:58 ` Stephen R. van den Berg
2008-08-27 18:22 ` Avery Pennarun
2008-08-28 12:21 ` Nick Andrew
2008-08-28 12:52 ` Stephen R. van den Berg
2008-08-26 17:38 ` Junio C Hamano
2008-08-26 18:33 ` Paolo Bonzini
2008-08-26 22:42 ` Junio C Hamano
2008-08-26 23:04 ` Junio C Hamano
2008-08-26 23:10 ` Stephen R. van den Berg
2008-08-27 3:05 ` Karl Chen
2008-08-27 4:38 ` Paolo Bonzini
2008-08-27 9:04 ` Stephen R. van den Berg
2008-08-27 6:35 ` Johannes Sixt
2008-08-27 8:20 ` Paolo Bonzini
2008-08-27 2:04 ` Nick Andrew
2008-08-25 15:56 ` [PATCH] Fix start_command() pipe bug when stdin is closed Karl Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48B2AFC2.20901@viscovery.net \
--to=j.sixt@viscovery.net \
--cc=bonzini@gnu.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=quarl@cs.berkeley.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.