diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-04-15 21:40:41 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-15 21:40:41 +0200 |
commit | d809d050ffe332cdd91281ad6b01e8363e417ec8 (patch) | |
tree | b48d5bd19a7cd6008d01488cf396b5f3fe208178 | |
parent | Merge branch 'po/help-guides' (diff) | |
parent | t9700: do not close STDERR (diff) | |
download | git-d809d050ffe332cdd91281ad6b01e8363e417ec8.tar.xz git-d809d050ffe332cdd91281ad6b01e8363e417ec8.zip |
Merge branch 'tr/perl-keep-stderr-open'
Closing (not redirecting to /dev/null) the standard error stream is
not a very smart thing to do. Later open may return file
descriptor #2 for unrelated purpose, and error reporting code may
write into them.
* tr/perl-keep-stderr-open:
t9700: do not close STDERR
perl: redirect stderr to /dev/null instead of closing
-rw-r--r-- | perl/Git.pm | 6 | ||||
-rwxr-xr-x | t/t9700/test.pl | 3 |
2 files changed, 5 insertions, 4 deletions
diff --git a/perl/Git.pm b/perl/Git.pm index 650db90853..dc48159cca 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -1489,12 +1489,12 @@ sub _command_common_pipe { if (not defined $pid) { throw Error::Simple("open failed: $!"); } elsif ($pid == 0) { - if (defined $opts{STDERR}) { - close STDERR; - } if ($opts{STDERR}) { open (STDERR, '>&', $opts{STDERR}) or die "dup failed: $!"; + } elsif (defined $opts{STDERR}) { + open (STDERR, '>', '/dev/null') + or die "opening /dev/null failed: $!"; } _cmd_exec($self, $cmd, @args); } diff --git a/t/t9700/test.pl b/t/t9700/test.pl index 0d4e366232..1140767b50 100755 --- a/t/t9700/test.pl +++ b/t/t9700/test.pl @@ -45,7 +45,8 @@ is($r->get_color("color.test.slot1", "red"), $ansi_green, "get_color"); # Failure cases for config: # Save and restore STDERR; we will probably extract this into a # "dies_ok" method and possibly move the STDERR handling to Git.pm. -open our $tmpstderr, ">&STDERR" or die "cannot save STDERR"; close STDERR; +open our $tmpstderr, ">&STDERR" or die "cannot save STDERR"; +open STDERR, ">", "/dev/null" or die "cannot redirect STDERR to /dev/null"; is($r->config("test.dupstring"), "value2", "config: multivar"); eval { $r->config_bool("test.boolother") }; ok($@, "config_bool: non-boolean values fail"); |