use base 'Catalyst::Controller';
use YAML;
-sub fork : Global {
+sub fork : Local {
my ($self, $c, $ls) = @_;
my ($result, $code) = (undef, 1);
$code = 0;
}
else {
- $result = system($ls, $ls, $ls);
+ $result = system($ls, $ls, $ls) || $!;
$code = $?;
}
$c->response->body(Dump({result => $result, code => $code}));
}
+sub backticks : Local {
+ my ($self, $c, $ls) = @_;
+ my ($result, $code) = (undef, 1);
+
+ if(!-e $ls || !-x _){
+ $result = 'skip';
+ $code = 0;
+ }
+ else {
+ $result = `$ls $ls $ls` || $!;
+ $code = $?;
+ }
+
+ $c->response->body(Dump({result => $result, code => $code}));
+}
+
1;
use Catalyst::Test qw(TestApp);
plan 'skip_all' if !-e '/bin/ls'; # see if /bin/ls exists
-plan tests => 4; # otherwise
+plan tests => 8; # otherwise
-ok(my $result = get('/fork/%2Fbin%2Fls'), 'get /fork//bin/ls');
-my @result = split /$/m, $result;
-$result = join "", @result[-4..-1];
+{
+ fork:
+ ok(my $result = get('/fork/fork/%2Fbin%2Fls'), 'get /fork//bin/ls');
+ my @result = split /$/m, $result;
+ $result = join q{}, @result[-4..-1];
+
+ my $result_ref = eval { Load($result) };
+ ok($result_ref, 'is YAML');
+ is($result_ref->{code}, 0, 'exited successfully');
+ like($result_ref->{result}, qr{^/bin/ls[^:]}, 'contains ^/bin/ls$');
+}
-my $result_ref = eval { Load($result) };
-ok($result_ref, 'is YAML');
-is($result_ref->{code}, 0, 'exited successfully');
-like($result_ref->{result}, qr{^/bin/ls[^:]}, 'contains ^/bin/ls$');
+{
+ backticks:
+ ok(my $result = get('/fork/backticks/%2Fbin%2Fls'), 'get /fork//bin/ls');
+ my @result = split /$/m, $result;
+ $result = join q{}, @result[-4..-1];
+
+ my $result_ref = eval { Load($result) };
+ ok($result_ref, 'is YAML');
+ is($result_ref->{code}, 0, 'exited successfully');
+ like($result_ref->{result}, qr{^/bin/ls[^:]}, 'contains ^/bin/ls$');
+}