@@ -87,6 +87,8 @@ our @EXPORT = qw(
8787
8888our ($windows_os , $tmp_check , $log_path , $test_logfile );
8989
90+ my @no_stdin ;
91+
9092BEGIN
9193{
9294
@@ -178,6 +180,21 @@ INIT
178180 autoflush STDOUT 1;
179181 autoflush STDERR 1;
180182 autoflush $testlog 1;
183+
184+ # Settings to close stdin for certain commands.
185+ # On non-Windows, use a pseudo-terminal, so that libraries like openssl
186+ # which open the tty if they think stdin isn't one for a password
187+ # don't block. Windows doesn't have ptys, so just provide an empty
188+ # string for stdin.
189+ if ($windows_os )
190+ {
191+ @no_stdin = (' <' , \" " );
192+ }
193+ else
194+ {
195+ use charnames ' :full' ;
196+ @no_stdin = (' <pty<' , \" \N{END OF TRANSMISSION} " );
197+ }
181198}
182199
183200END
@@ -343,7 +360,7 @@ sub run_command
343360{
344361 my ($cmd ) = @_ ;
345362 my ($stdout , $stderr );
346- my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr ;
363+ my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin ;
347364 chomp ($stdout );
348365 chomp ($stderr );
349366 return ($stdout , $stderr );
@@ -576,7 +593,7 @@ sub check_pg_config
576593 my ($regexp ) = @_ ;
577594 my ($stdout , $stderr );
578595 my $result = IPC::Run::run [ ' pg_config' , ' --includedir' ], ' >' ,
579- \$stdout , ' 2>' , \$stderr
596+ \$stdout , ' 2>' , \$stderr , @no_stdin
580597 or die " could not execute pg_config" ;
581598 chomp ($stdout );
582599 $stdout =~ s /\r $// ;
@@ -673,7 +690,7 @@ sub program_help_ok
673690 my ($stdout , $stderr );
674691 print (" # Running: $cmd --help\n " );
675692 my $result = IPC::Run::run [ $cmd , ' --help' ], ' >' , \$stdout , ' 2>' ,
676- \$stderr ;
693+ \$stderr , @no_stdin ;
677694 ok($result , " $cmd --help exit code 0" );
678695 isnt($stdout , ' ' , " $cmd --help goes to stdout" );
679696 is($stderr , ' ' , " $cmd --help nothing to stderr" );
@@ -695,7 +712,7 @@ sub program_version_ok
695712 my ($stdout , $stderr );
696713 print (" # Running: $cmd --version\n " );
697714 my $result = IPC::Run::run [ $cmd , ' --version' ], ' >' , \$stdout , ' 2>' ,
698- \$stderr ;
715+ \$stderr , @no_stdin ;
699716 ok($result , " $cmd --version exit code 0" );
700717 isnt($stdout , ' ' , " $cmd --version goes to stdout" );
701718 is($stderr , ' ' , " $cmd --version nothing to stderr" );
@@ -718,8 +735,7 @@ sub program_options_handling_ok
718735 my ($stdout , $stderr );
719736 print (" # Running: $cmd --not-a-valid-option\n " );
720737 my $result = IPC::Run::run [ $cmd , ' --not-a-valid-option' ], ' >' ,
721- \$stdout ,
722- ' 2>' , \$stderr ;
738+ \$stdout , ' 2>' , \$stderr , @no_stdin ;
723739 ok(!$result , " $cmd with invalid option nonzero exit code" );
724740 isnt($stderr , ' ' , " $cmd with invalid option prints error message" );
725741 return ;
@@ -740,7 +756,7 @@ sub command_like
740756 my ($cmd , $expected_stdout , $test_name ) = @_ ;
741757 my ($stdout , $stderr );
742758 print (" # Running: " . join (" " , @{$cmd }) . " \n " );
743- my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr ;
759+ my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin ;
744760 ok($result , " $test_name : exit code 0" );
745761 is($stderr , ' ' , " $test_name : no stderr" );
746762 like($stdout , $expected_stdout , " $test_name : matches" );
@@ -769,7 +785,8 @@ sub command_like_safe
769785 my $stdoutfile = File::Temp-> new();
770786 my $stderrfile = File::Temp-> new();
771787 print (" # Running: " . join (" " , @{$cmd }) . " \n " );
772- my $result = IPC::Run::run $cmd , ' >' , $stdoutfile , ' 2>' , $stderrfile ;
788+ my $result = IPC::Run::run $cmd , ' >' , $stdoutfile , ' 2>' , $stderrfile ,
789+ @no_stdin ;
773790 $stdout = slurp_file($stdoutfile );
774791 $stderr = slurp_file($stderrfile );
775792 ok($result , " $test_name : exit code 0" );
@@ -793,7 +810,7 @@ sub command_fails_like
793810 my ($cmd , $expected_stderr , $test_name ) = @_ ;
794811 my ($stdout , $stderr );
795812 print (" # Running: " . join (" " , @{$cmd }) . " \n " );
796- my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr ;
813+ my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin ;
797814 ok(!$result , " $test_name : exit code not 0" );
798815 like($stderr , $expected_stderr , " $test_name : matches" );
799816 return ;
@@ -831,7 +848,7 @@ sub command_checks_all
831848 # run command
832849 my ($stdout , $stderr );
833850 print (" # Running: " . join (" " , @{$cmd }) . " \n " );
834- IPC::Run::run($cmd , ' >' , \$stdout , ' 2>' , \$stderr );
851+ IPC::Run::run($cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin );
835852
836853 # See http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR
837854 my $ret = $? ;
0 commit comments