commit ed48fc691927c710dcff24bd2bfc890c9617151d Author: Ralf Corsépius <corsepiu@xxxxxxxxxxxxxxxxx> Date: Tue Feb 11 07:27:11 2014 +0100 Add 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch (RHBZ#1062267). - Spec-file cosmetics. ...x-for-RT-52317-Calling-run3-garbles-STDIN.patch | 134 ++++++++++++++++++++ perl-IPC-Run3.spec | 20 +++- 2 files changed, 151 insertions(+), 3 deletions(-) --- diff --git a/0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch b/0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch new file mode 100644 index 0000000..fedc11d --- /dev/null +++ b/0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch @@ -0,0 +1,134 @@ +From 8ebe48760cfdc78fbf4fc46413dde9470121b99e Mon Sep 17 00:00:00 2001 +From: Roderich Schupp <roderich.schupp@xxxxxxxxx> +Date: Sun, 29 Sep 2013 18:12:03 +0200 +Subject: [PATCH 5/5] test and fix for RT #52317: Calling run3 garbles STDIN + +--- + lib/IPC/Run3.pm | 26 ++++++------------------- + t/preserve_stdin.t | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 63 insertions(+), 20 deletions(-) + create mode 100644 t/preserve_stdin.t + +diff --git a/lib/IPC/Run3.pm b/lib/IPC/Run3.pm +index 12c9d8a..777e290 100644 +--- a/lib/IPC/Run3.pm ++++ b/lib/IPC/Run3.pm +@@ -363,14 +363,12 @@ sub run3 { + $options if defined $stderr; + + # this should make perl close these on exceptions +-# local *STDIN_SAVE; ++ local *STDIN_SAVE; + local *STDOUT_SAVE; + local *STDERR_SAVE; + +- my $saved_fd0 = dup( 0 ) if defined $in_fh; +- +-# open STDIN_SAVE, "<&STDIN"# or croak "run3(): $! saving STDIN" +-# if defined $in_fh; ++ open STDIN_SAVE, "<&STDIN" or croak "run3(): $! saving STDIN" ++ if defined $in_fh; + open STDOUT_SAVE, ">&STDOUT" or croak "run3(): $! saving STDOUT" + if defined $out_fh; + open STDERR_SAVE, ">&STDERR" or croak "run3(): $! saving STDERR" +@@ -378,17 +376,10 @@ sub run3 { + + my $errno; + my $ok = eval { +- # The open() call here seems to not force fd 0 in some cases; +- # I ran in to trouble when using this in VCP, not sure why. +- # the dup2() seems to work. +- dup2( fileno $in_fh, 0 ) +-# open STDIN, "<&=" . fileno $in_fh ++ open STDIN, "<&=" . fileno $in_fh + or croak "run3(): $! redirecting STDIN" + if defined $in_fh; + +-# close $in_fh or croak "$! closing STDIN temp file" +-# if ref $stdin; +- + open STDOUT, ">&" . fileno $out_fh + or croak "run3(): $! redirecting STDOUT" + if defined $out_fh; +@@ -428,13 +419,8 @@ sub run3 { + + my @errs; + +- if ( defined $saved_fd0 ) { +- dup2( $saved_fd0, 0 ); +- POSIX::close( $saved_fd0 ); +- } +- +-# open STDIN, "<&STDIN_SAVE"# or push @errs, "run3(): $! restoring STDIN" +-# if defined $in_fh; ++ open STDIN, "<&STDIN_SAVE" or push @errs, "run3(): $! restoring STDIN" ++ if defined $in_fh; + open STDOUT, ">&STDOUT_SAVE" or push @errs, "run3(): $! restoring STDOUT" + if defined $out_fh; + open STDERR, ">&STDERR_SAVE" or push @errs, "run3(): $! restoring STDERR" +diff --git a/t/preserve_stdin.t b/t/preserve_stdin.t +new file mode 100644 +index 0000000..8e090ee +--- /dev/null ++++ b/t/preserve_stdin.t +@@ -0,0 +1,57 @@ ++#!perl -w ++ ++## test whether reading from STDIN is preserved when ++## run3 is called in between reads ++ ++use Test::More; ++use IPC::Run3; ++use File::Temp qw(tempfile); ++use strict; ++ ++# call run3 at different lines (problems might manifest itself ++# on different lines, probably due to different buffering of input) ++my @check_at = (5, 10, 50, 100, 200, 500); ++plan tests => @check_at * 3; ++ ++# create a test file for input containing 1000 lines ++my $nlines = 1000; ++my @exp_lines; ++my ($fh, $file) = tempfile(UNLINK => 1); ++for (my $i = 1; $i <= $nlines; $i++) ++{ ++ my $line = "this is line $i"; ++ push @exp_lines, $line; ++ print $fh $line, "\n"; ++} ++close $fh; ++ ++ ++my ( $in, $out, $err ); ++ ++foreach my $n (@check_at) ++{ ++ my $nread = 0; ++ my $unexpected; ++ open STDIN, "<", $file or die "can't open file $file: $!"; ++ while (<STDIN>) ++ { ++ chomp; ++ $unexpected = qq[line $nread: expected "$exp_lines[$nread]", got "$_"\n] ++ unless $exp_lines[$nread] eq $_ || $unexpected; ++ $nread++; ++ ++ if ($nread == $n) ++ { ++ $in = "checking at line $n"; ++ run3 [ $^X, '-e', 'print uc $_ while <>' ], \$in, \$out, \$err; ++ die "command failed" unless $? == 0; ++ is($out, uc $in); ++ } ++ } ++ close STDIN; ++ ++ is($nread, $nlines, "STDIN was read completely"); ++ ok(!$unexpected, "STDIN as expected") or diag($unexpected); ++} ++ ++ +-- +1.8.5.3 + diff --git a/perl-IPC-Run3.spec b/perl-IPC-Run3.spec index 5b2d261..766190d 100644 --- a/perl-IPC-Run3.spec +++ b/perl-IPC-Run3.spec @@ -1,26 +1,35 @@ Name: perl-IPC-Run3 Version: 0.046 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Run a subprocess in batch mode License: GPL+ or Artistic or BSD Group: Development/Libraries URL: http://search.cpan.org/dist/IPC-Run3/ Source0: http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/IPC-Run3-%{version}.tar.gz BuildArch: noarch + BuildRequires: perl(Carp) -BuildRequires: perl(constant) BuildRequires: perl(Exporter) BuildRequires: perl(ExtUtils::MakeMaker) BuildRequires: perl(File::Temp) BuildRequires: perl(Getopt::Long) +BuildRequires: perl(POSIX) BuildRequires: perl(Test) BuildRequires: perl(Test::More) >= 0.31 BuildRequires: perl(Time::HiRes) +BuildRequires: perl(constant) +BuildRequires: perl(strict) + # For improved tests BuildRequires: perl(Test::Pod::Coverage) BuildRequires: perl(Test::Pod) Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) +# RHBZ #1062267 / https://rt.cpan.org/Public/Bug/Display.html?id=52317 +# Patch from +# https://github.com/rschupp/IPC-Run3/commit/8ebe48760cfdc78fbf4fc46413dde9470121b99e +Patch0: 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch + %description This module allows you to run a subprocess and redirect stdin, stdout, and/or stderr to files and perl data structures. It aims to satisfy 99% of @@ -29,6 +38,8 @@ API and none of the bloat and rarely used features of IPC::Run. %prep %setup -q -n IPC-Run3-%{version} +%patch0 -p1 + # Perms in tarballs are broken find -type f -exec chmod -x {} \; @@ -45,12 +56,15 @@ find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} \; make test %files -%defattr(-,root,root,-) %doc Changes LICENSE README %{perl_vendorlib}/* %{_mandir}/man3/* %changelog +* Tue Feb 11 2014 Ralf Corsépius <corsepiu@xxxxxxxxxxxxxxxxx> - 0.046-4 +- Add 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch (RHBZ#1062267). +- Spec-file cosmetics. + * Sat Aug 03 2013 Fedora Release Engineering <rel-eng@xxxxxxxxxxxxxxxxxxxxxxx> - 0.046-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild -- Fedora Extras Perl SIG http://www.fedoraproject.org/wiki/Extras/SIGs/Perl perl-devel mailing list perl-devel@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/perl-devel