Skip to content

Commit bd4ca09

Browse files
Thomas Rastgitster
authored andcommitted
perl: redirect stderr to /dev/null instead of closing
On my system, t9100.1 triggers the following warning: ==352== Syscall param write(buf) points to uninitialised byte(s) ==352== at 0x57119C0: __write_nocancel (in /lib64/libc-2.17.so) ==352== by 0x56AC1D2: _IO_file_write@@GLIBC_2.2.5 (in /lib64/libc-2.17.so) ==352== by 0x56AC0B1: new_do_write (in /lib64/libc-2.17.so) ==352== by 0x56AD3B4: _IO_do_write@@GLIBC_2.2.5 (in /lib64/libc-2.17.so) ==352== by 0x56AD6FE: _IO_file_overflow@@GLIBC_2.2.5 (in /lib64/libc-2.17.so) ==352== by 0x56AE3D8: _IO_default_xsputn (in /lib64/libc-2.17.so) ==352== by 0x56ACAA2: _IO_file_xsputn@@GLIBC_2.2.5 (in /lib64/libc-2.17.so) ==352== by 0x5682133: buffered_vfprintf (in /lib64/libc-2.17.so) ==352== by 0x567CE9D: vfprintf (in /lib64/libc-2.17.so) ==352== by 0x5687096: fprintf (in /lib64/libc-2.17.so) ==352== by 0x4E7AC5: vreportf (usage.c:15) ==352== by 0x4E7B14: die_builtin (usage.c:38) The actual complaint appears to be a bug in the underlying implementation. What's interesting here is that it is apparently _triggered_ by closing stderr, which results in (from strace) write(2, "fatal: Needed a single revision\n", 32) = -1 EBADF (Bad file descriptor) write(2, "\0", 1) = -1 EBADF (Bad file descriptor) Closing stderr is a bad idea anyway: there is a very real chance that we print fatal error messages to some other file that just happens to be opened on the now-free FD 2. So let's not do that. As pointed out by Eric Wong (thanks), the initial close needs to go: die() would again write nowhere if we close STDERR beforehand. Signed-off-by: Thomas Rast <[email protected]> Signed-off-by: Eric Wong <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 3a3101c commit bd4ca09

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

perl/Git.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,12 +1335,12 @@ sub _command_common_pipe {
13351335
if (not defined $pid) {
13361336
throw Error::Simple("open failed: $!");
13371337
} elsif ($pid == 0) {
1338-
if (defined $opts{STDERR}) {
1339-
close STDERR;
1340-
}
13411338
if ($opts{STDERR}) {
13421339
open (STDERR, '>&', $opts{STDERR})
13431340
or die "dup failed: $!";
1341+
} elsif (defined $opts{STDERR}) {
1342+
open (STDERR, '>', '/dev/null')
1343+
or die "opening /dev/null failed: $!";
13441344
}
13451345
_cmd_exec($self, $cmd, @args);
13461346
}

0 commit comments

Comments
 (0)