From: Charles Bailey Date: Mon, 2 Mar 1998 01:39:47 +0000 (-0500) Subject: File::Basename taint fix (revised) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=12cbd72080d6b000bbed2e06a5c3723a60aeea34;p=p5sagit%2Fp5-mst-13.2.git File::Basename taint fix (revised) p4raw-id: //depot/perl@777 --- diff --git a/lib/File/Basename.pm b/lib/File/Basename.pm index 5c6299e..8828a52 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; }