use strict;
use warnings;
use RT::Test tests => undef;
use Test::Warn;
my ($base, $m) = RT::Test->started_ok;
my $ticket = RT::Test->create_ticket(
Queue => 'General',
Subject => 'test ticket A',
);
my $id = $ticket->id;
ok $id, "created ticket";
my @links = (
'javascript:alert("xss")',
'data:text/html,',
);
for my $link ( map { ($_, ucfirst $_) } @links ) {
my ($ok, $msg);
warnings_like {
($ok, $msg) = $ticket->AddLink(
Type => 'RefersTo',
Target => $link,
);
} [qr/Could not determine a URI scheme/];
ok !$ok, $msg;
ok $m->login, "logged in";
$m->get_ok($base);
$m->follow_link_ok({ text => 'test ticket A' }, 'ticket page');
$m->follow_link_ok({ text => 'Links' }, 'links page');
$m->submit_form_ok({
with_fields => {
"$id-RefersTo" => $link,
},
button => 'SubmitTicket',
}, 'submitted links page');
$m->content_contains("Couldn't resolve ");
$m->next_warning_like(qr/Could not determine a URI scheme/, 'expected warning');
my $element = $m->find_link( url => $link );
ok !$element, "no link";
}
$m->no_leftover_warnings_ok;
undef $m;
done_testing;