diff options
author | Charles Bailey <bailey@newman.upenn.edu> | 1998-03-01 20:39:47 -0500 |
---|---|---|
committer | Malcolm Beattie <mbeattie@sable.ox.ac.uk> | 1998-03-05 18:50:25 +0000 |
commit | 12cbd72080d6b000bbed2e06a5c3723a60aeea34 (patch) | |
tree | 84bb12d3c680a666dea69ae838f153974da95378 /lib/File/Basename.pm | |
parent | 9cecd9f2b811c7f1151e849c0c81141fecc10bc7 (diff) | |
download | perl-12cbd72080d6b000bbed2e06a5c3723a60aeea34.tar.gz |
File::Basename taint fix (revised)
p4raw-id: //depot/perl@777
Diffstat (limited to 'lib/File/Basename.pm')
-rw-r--r-- | lib/File/Basename.pm | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/File/Basename.pm b/lib/File/Basename.pm index 5c6299e596..8828a52bfc 100644 --- a/lib/File/Basename.pm +++ b/lib/File/Basename.pm @@ -127,8 +127,8 @@ require Exporter; @ISA = qw(Exporter); @EXPORT = qw(fileparse fileparse_set_fstype basename dirname); #use strict; -#use vars qw($VERSION $Fileparse_fstype $Fileparse_igncase); -$VERSION = "2.5"; +use vars qw($VERSION $Fileparse_fstype $Fileparse_igncase); +$VERSION = "2.6"; # fileparse_set_fstype() - specify OS-based rules used in future @@ -155,11 +155,13 @@ sub fileparse { my($fullname,@suffices) = @_; my($fstype,$igncase) = ($Fileparse_fstype, $Fileparse_igncase); my($dirpath,$tail,$suffix,$basename); + my($taint) = substr($fullname,0,0); # Is $fullname tainted? if ($fstype =~ /^VMS/i) { if ($fullname =~ m#/#) { $fstype = '' } # We're doing Unix emulation else { ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/); + $dirpath ||= ''; # should always be defined } } if ($fstype =~ /^MS(DOS|Win32)/i) { @@ -183,12 +185,15 @@ sub fileparse { foreach $suffix (@suffices) { my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$"; if ($basename =~ s/$pat//) { + $taint .= substr($suffix,0,0); $tail = $1 . $tail; } } } - wantarray ? ($basename,$dirpath,$tail) : $basename; + $tail .= $taint if defined $tail; # avoid warning if $tail == undef + wantarray ? ($basename . $taint, $dirpath . $taint, $tail) + : $basename . $taint; } |