From: Richard Levitte Date: Tue, 26 Jan 2016 16:50:13 +0000 (+0100) Subject: Be careful when applying EXE_SHELL X-Git-Tag: OpenSSL_1_1_0-pre3~404 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=ec307bcc36393969967c4156d98fca50cd446c81;hp=8f243018d2e5e4dfe988906849a7f30532e288aa Be careful when applying EXE_SHELL $EXE_SHELL should only be used with out own programs, not with surrounding programs such as the perl interpreter. Reviewed-by: Matt Caswell --- diff --git a/test/testlib/OpenSSL/Test.pm b/test/testlib/OpenSSL/Test.pm index 491984cee4..e1c2899c7e 100644 --- a/test/testlib/OpenSSL/Test.pm +++ b/test/testlib/OpenSSL/Test.pm @@ -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";