From: Michael Witten Date: Wed, 05 Dec 2007 11:07:29 GMT Subject: Re: [PATCH] git-cvsserver runs hooks/post-update Message-ID: <7245A47D-143F-4DC7-8414-D8C99C0ED9C3@mit.edu> In-Reply-To: <7v63zdtnjz.fsf@gitster.siamese.dyndns.org> On 5 Dec 2007, at 5:59:12 AM, Junio C Hamano wrote: > + ### Then hooks/post-update > + $hook = $ENV{GIT_DIR}.'hooks/post-update'; > + if (-x $hook) { > + system($hook, "refs/heads/$state->{module}"); > + } > + Firstly, I apologize for not getting this small patch done myself; it's very hectic this time of year. Secondly, I'd like to recall my unanswered question: > Also, I explicitly decided to pipe input into post-receive > by hand rather than relying on a system() call that someone > might exploit maliciously: ### Emulate git-receive-pack by running hooks/post-receive my $hook = $ENV{GIT_DIR}.'hooks/post-receive'; if( -x $hook ) { open(my $pipe, "| $hook") || die "can't fork $!"; local $SIG{PIPE} = sub { die 'pipe broke' }; print $pipe "$parenthash $commithash refs/heads/$state->{module}\n"; close $pipe || die "bad pipe: $! $?"; } > Unfortunately, it turns out that open() with a pipe essentially > invokes system(); the solution is to fork a child process and > then to turn the child into the process with which communication > is desired via a call to exec(). > > Because the rest of git-cvsserver.perl uses explicit system() > calls, I have been wondering if I am being overly cautious. Am I being overly cautious?