summaryrefslogtreecommitdiff
path: root/ext/IPC-Open3
diff options
context:
space:
mode:
authorVernon Lyon <vlyon@cpan.org>2010-09-26 06:34:58 -0700
committerFather Chrysostomos <sprout@cpan.org>2010-09-26 06:34:58 -0700
commitfb9b5b31d8a62644191f4e414a66124e86f30797 (patch)
tree3c3ca699e92b19de09d334a54b5cea3a2d69e61b /ext/IPC-Open3
parent83f8bb564961ee8fba35156e720bef403d8fa9a7 (diff)
downloadperl-fb9b5b31d8a62644191f4e414a66124e86f30797.tar.gz
[perl #76474]: IPC::Open3 doesn't handle file descriptors correctly
In the POD docs it says: "The filehandles may also be integers, in which case they are under- stood as file descriptors." However IPC::Open3 doesn't handle the file descriptors correctly. As an example, if we try to dup STDIN in a child process by using it's file descriptor, we get: > perl -MIPC::Open3 -wle 'open3("<&1", my $out, undef, $^X)' close() on unopened filehandle 1 at /usr/share/perl/5.10/IPC/Open3.pm line 70. open3: close(1) failed: Bad file descriptor at -e line 1 This is because in IPC::Open3 the subroutines xpipe*, xclose* and xopen don't cater for descriptors being passed in instead of filehandles.
Diffstat (limited to 'ext/IPC-Open3')
-rw-r--r--ext/IPC-Open3/lib/IPC/Open3.pm2
1 files changed, 1 insertions, 1 deletions
diff --git a/ext/IPC-Open3/lib/IPC/Open3.pm b/ext/IPC-Open3/lib/IPC/Open3.pm
index 50ae61eb32..879469e71f 100644
--- a/ext/IPC-Open3/lib/IPC/Open3.pm
+++ b/ext/IPC-Open3/lib/IPC/Open3.pm
@@ -181,7 +181,7 @@ sub xopen {
}
sub xclose {
- close $_[0] or croak "$Me: close($_[0]) failed: $!";
+ $_[0] =~ /\A=?(\d+)\z/ ? eval { require POSIX; POSIX::close($1); } : close $_[0]
}
sub fh_is_fd {