RT 4.0.22
[freeside.git] / rt / t / security / CVE-2011-5093-execute-code.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => undef;
5
6 my $template = RT::Template->new( RT->SystemUser );
7 my ($ok, $msg) = $template->Create(
8     Queue   => 0,
9     Name    => 'test',
10     Type    => 'Simple',
11     Content => <<'.',
12 ===Create-Ticket: testing
13 Queue: General
14 Subject: duplicate: { $Tickets{TOP}->Subject }
15 .
16 );
17 ok $ok, $msg;
18
19 my $ticket = RT::Test->create_ticket(
20     Queue   => 'General',
21     Subject => 'a ticket',
22 );
23 ok $ticket->id, "created ticket";
24
25 for my $type (qw(Simple Perl)) {
26     if ($template->Type ne $type) {
27         my ($ok, $msg) = $template->SetType($type);
28         ok $ok, $msg;
29     }
30
31     require RT::Action::CreateTickets;
32     my $action = RT::Action::CreateTickets->new(
33         CurrentUser     => RT->SystemUser,
34         TemplateObj     => $template,
35         TicketObj       => $ticket,
36     );
37     $action->{TransactionObj} = $ticket->Transactions->First;
38     ok $action->Prepare, 'prepares';
39     ok $action->Commit, 'commits';
40
41     my $new_ticket = RT::Test->last_ticket;
42     ok $new_ticket->id > $ticket->id, 'new ticket';
43
44     if ($type eq 'Perl') {
45         is $new_ticket->Subject, 'duplicate: a ticket', 'interpolated';
46         isnt $new_ticket->Subject, 'duplicate: { $Tickets{TOP}->Subject }', 'interpolated';
47     } else {
48         isnt $new_ticket->Subject, 'duplicate: a ticket', 'not interpolated';
49         is $new_ticket->Subject, 'duplicate: { $Tickets{TOP}->Subject }', 'not interpolated';
50     }
51 }
52
53 done_testing;