Commit ec307bcc authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarMatt Caswell <matt@openssl.org>
parent 8f243018
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -705,12 +705,13 @@ sub __cwd {


sub __fixup_cmd {
sub __fixup_cmd {
    my $prog = shift;
    my $prog = shift;
    my $exe_shell = shift;


    my $prefix = __top_file("util", "shlib_wrap.sh")." ";
    my $prefix = __top_file("util", "shlib_wrap.sh")." ";
    my $ext = $ENV{"EXE_EXT"} || "";
    my $ext = $ENV{"EXE_EXT"} || "";


    if (defined($ENV{EXE_SHELL})) {
    if (defined($exe_shell)) {
	$prefix = "$ENV{EXE_SHELL} ";
	$prefix = "$exe_shell ";
    } elsif ($^O eq "VMS" ) {	# VMS
    } elsif ($^O eq "VMS" ) {	# VMS
	$prefix = ($prog =~ /^[<\[]/ ? "mcr " : "mcr []");
	$prefix = ($prog =~ /^[<\[]/ ? "mcr " : "mcr []");
	$ext = ".exe";
	$ext = ".exe";
@@ -754,9 +755,13 @@ sub __build_cmd {
    # more than one.  If so, only the first is to be considered a
    # 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
    # program to fix up, the rest is part of the arguments.  This
    # happens for perl scripts, where $path_builder will return
    # 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 @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 (@prog) {
	if ( ! -f $prog[0] ) {
	if ( ! -f $prog[0] ) {
	    print STDERR "$prog[0] not found\n";
	    print STDERR "$prog[0] not found\n";