On Tue, 7 Dec 2004, Stas Bekman wrote:

> Randy Kobes wrote:
[ ... ]
> > ==============================================================
> > Index: lib/Apache/TestConfig.pm
> > ===================================================================
> > --- lib/Apache/TestConfig.pm        (revision 110064)
> > +++ lib/Apache/TestConfig.pm        (working copy)
> > @@ -1043,7 +1043,8 @@
> >      # Temporarily untaint PATH
> >      (local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
> >      # -T disallows relative directories in the PATH
> > -    $ENV{PATH} = join ':', grep !/^\./, split /:/, $ENV{PATH};
> > +    my $sep = WIN32 ? ';' : ':';
> > +    $ENV{PATH} = join $sep, grep !/^\./, split /$sep/, $ENV{PATH};
> >
> >      # launder for -T
> >      $cmd = $1 if $cmd =~ /(.*)/;
> > @@ -1657,7 +1658,12 @@
> >      return unless $self->{APXS};
> >      my $val;
> >      unless (exists $self->{_apxs}{$q}) {
> > -        local @ENV{ qw(PATH IFS CDPATH ENV BASH_ENV) };
> > +        local @ENV{ qw(IFS CDPATH ENV BASH_ENV) };
> > +        # Temporarily untaint PATH
> > +        (local $ENV{PATH}) = ( $ENV{PATH} =~ /(.*)/ );
> > +        # -T disallows relative directories in the PATH
> > +        my $sep = WIN32 ? ';' : ':';
> > +        $ENV{PATH} = join $sep, grep !/^\./, split /$sep/, $ENV{PATH};
> >          my $devnull = devnull();
> >          my $apxs = shell_ready($self->{APXS});
> >          $val = qx($apxs -q $q 2>$devnull);
>
> As soon as you see dup like this, think refactoring :) e.g. add
> untaint_path(), that does the work and call it:
>
>    local $ENV{PATH}) = untaint_path($ENV{PATH});
>
> Otherwise +1.
>
> And of course this wrapper should probably used in open_cmd too!

OK, I'll do that - thanks!

> Also is there some File::Spec thingy that defines record
> separator in paths?

I looked through there - there's not one specifically
defined. There are special cases for various platforms:
   Mac => uses ',', but needs $ENV{Commands}, not $ENV{PATH}
   OS2 => uses ';', but also translates '\' to '/'
   VMS => uses a different $ENV variable
So some of these (eg, Mac and VMS) would require special
handling just to get at the equivalent of $ENV{PATH}.

Is leaving it just as is OK for the moment (using ';' for
WIN32, ':' otherwise), and if someone has problems with it,
we can fix it then?

Also, I haven't tried it yet, but just to make sure the
email messages go to the right place - can one do a commit
to Apache-Test from within modperl-2.0 svn (from within
the Apache-Test subdirectory)?

-- 
best regards,
randy

Reply via email to