Claude-Agent-Code-Review

 view release on metacpan or  search on metacpan

t/02-tools.t  view on Meta::CPAN

    chdir($orig_dir);
};

# Test path traversal protection
subtest 'Path traversal protection' => sub {
    my $server = Claude::Agent::Code::Review::Tools->create_server();

    # Test get_file_context with path traversal
    my $tool = $server->get_tool('get_file_context');
    my $result = execute_tool($tool,{ file => '../../../etc/passwd', line => 1 });
    ok($result->{is_error}, 'blocked path traversal in get_file_context');

    # Test get_dependencies with path traversal
    $tool = $server->get_tool('get_dependencies');
    $result = execute_tool($tool,{ file => '../../../etc/passwd' });
    ok($result->{is_error}, 'blocked path traversal in get_dependencies');

    # Test analyze_complexity with path traversal
    $tool = $server->get_tool('analyze_complexity');
    $result = execute_tool($tool,{ file => '../../../etc/passwd', function => 'test' });
    ok($result->{is_error}, 'blocked path traversal in analyze_complexity');
};

done_testing();

t/05-perlcritic.t  view on Meta::CPAN

        my $options = Claude::Agent::Code::Review::Options->new(
            perlcritic => 1,
        );

        # Try to analyze files outside project directory
        my @issues = Claude::Agent::Code::Review::Perlcritic->analyze(
            paths   => ['../../../etc/passwd'],
            options => $options,
        );

        is(scalar @issues, 0, 'path traversal blocked');

        chdir($orig_dir);
    };

    subtest 'handles parse errors gracefully' => sub {
        chdir($tempdir);

        my $broken_file = path($tempdir, 'broken.pm');
        $broken_file->spew_utf8(<<'END');
package Broken;



( run in 0.500 second using v1.01-cache-2.11-cpan-39bf76dae61 )