Be careful when applying EXE_SHELL
authorRichard Levitte <levitte@openssl.org>
Tue, 26 Jan 2016 16:50:13 +0000 (17:50 +0100)
committerRichard Levitte <levitte@openssl.org>
Wed, 27 Jan 2016 11:11:52 +0000 (12:11 +0100)
$EXE_SHELL should only be used with out own programs, not with
surrounding programs such as the perl interpreter.

Reviewed-by: Matt Caswell <matt@openssl.org>
test/testlib/OpenSSL/Test.pm

index 491984cee4c59cd2d9fd59cd3bb2d7bb88a63934..e1c2899c7edf10ff9a1922cf787075867fd84d0e 100644 (file)
@@ -705,12 +705,13 @@ sub __cwd {
 
 sub __fixup_cmd {
     my $prog = shift;
+    my $exe_shell = shift;
 
     my $prefix = __top_file("util", "shlib_wrap.sh")." ";
     my $ext = $ENV{"EXE_EXT"} || "";
 
-    if (defined($ENV{EXE_SHELL})) {
-       $prefix = "$ENV{EXE_SHELL} ";
+    if (defined($exe_shell)) {
+       $prefix = "$exe_shell ";
     } elsif ($^O eq "VMS" ) {  # VMS
        $prefix = ($prog =~ /^[<\[]/ ? "mcr " : "mcr []");
        $ext = ".exe";
@@ -754,9 +755,13 @@ sub __build_cmd {
     # more than one.  If so, only the first is to be considered a
     # program to fix up, the rest is part of the arguments.  This
     # happens for perl scripts, where $path_builder will return
-    # a list of two, $^X and the script name
+    # a list of two, $^X and the script name.
+    # Also, if $path_builder returned more than one, we don't apply
+    # the EXE_SHELL environment variable.
     my @prog = ($path_builder->(shift @cmdarray));
-    my $cmd = __fixup_cmd(shift @prog);
+    my $first = shift @prog;
+    my $exe_shell = @prog ? undef : $ENV{EXE_SHELL};
+    my $cmd = __fixup_cmd($first, $exe_shell);
     if (@prog) {
        if ( ! -f $prog[0] ) {
            print STDERR "$prog[0] not found\n";