Forward port urlize changes, and tests.

This commit is contained in:
Colin Kuskie 2009-06-10 03:34:09 +00:00
parent 8892b51b73
commit 1441fe2e88
2 changed files with 16 additions and 11 deletions

View file

@ -516,7 +516,7 @@ sub unescape {
=head2 urlize ( string ) =head2 urlize ( string )
Returns a url that is safe for WebGUI pages. Strings are lower-cased, run through Returns a url that is safe for WebGUI pages. Strings are lower-cased, run through
$self->makeCompliant and then have any trailing slashes removed. $self->makeCompliant and then have any relative segments and trailing slashes removed.
=head3 string =head3 string
@ -525,17 +525,17 @@ The string to urlize.
=cut =cut
sub urlize { sub urlize {
my $self = shift; my $self = shift;
my ($value); my ($value);
$value = lc(shift); #lower cases whole string $value = lc(shift); #lower cases whole string
$value = $self->makeCompliant($value); $value = $self->makeCompliant($value);
# remove /./ or /../ # remove /./ or /../
$value =~ s{(^|/)\.\.?/}{$1}; $value =~ s{(^|/)(?:\.\.?/)*}{$1}g;
# remove trailing slashes # remove trailing slashes
$value =~ s/\/$//; $value =~ s/\/$//;
return $value; return $value;
} }

View file

@ -52,7 +52,7 @@ my @getRefererUrlTests = (
use Test::More; use Test::More;
use Test::MockObject::Extends; use Test::MockObject::Extends;
plan tests => 76 + scalar(@getRefererUrlTests); plan tests => 81 + scalar(@getRefererUrlTests);
my $session = WebGUI::Test->session; my $session = WebGUI::Test->session;
@ -359,8 +359,13 @@ is($unEscapedString, '10% is enough!', 'unescape method');
####################################### #######################################
is($session->url->urlize('HOME/PATH1'), 'home/path1', 'urlize: urls are lower cased'); is($session->url->urlize('HOME/PATH1'), 'home/path1', 'urlize: urls are lower cased');
is($session->url->urlize('home/'), 'home', 'urlize: trailing slashes removed'); is($session->url->urlize('home/'), 'home', '... trailing slashes removed');
is($session->url->urlize('home is where the heart is'), 'home-is-where-the-heart-is', 'urlize: makeCompliant translates spaces to dashes'); is($session->url->urlize('home is where the heart is'), 'home-is-where-the-heart-is', '... makeCompliant translates spaces to dashes');
is($session->url->urlize('/home'), 'home', '... removes initial slash');
is($session->url->urlize('home/../out-of-bounds'), 'home/out-of-bounds', '... removes multiple ../');
is($session->url->urlize('home/./here'), 'home/here', '... removes multiple ./');
is($session->url->urlize('home/../../out-of-bounds'), 'home/out-of-bounds', '... removes multiple ../');
is($session->url->urlize('home/././here'), 'home/here', '... removes multiple ./');
####################################### #######################################
# #