File Coverage

blib/lib/File/VirusScan/Engine/Command/FSecure/FSAV.pm
Criterion Covered Total %
statement 22 49 44.9
branch 0 20 0.0
condition 0 6 0.0
subroutine 8 9 88.8
pod 1 2 50.0
total 31 86 36.0


line stmt bran cond sub pod time code
1             package File::VirusScan::Engine::Command::FSecure::FSAV;
2 1     1   99275 use strict;
  1         10  
  1         24  
3 1     1   5 use warnings;
  1         1  
  1         22  
4 1     1   4 use Carp;
  1         1  
  1         42  
5              
6 1     1   398 use File::VirusScan::Engine::Command;
  1         3  
  1         5  
7 1     1   44 use vars qw( @ISA );
  1         2  
  1         39  
8             @ISA = qw( File::VirusScan::Engine::Command );
9              
10 1     1   5 use Cwd 'abs_path';
  1         2  
  1         36  
11              
12 1     1   364 use File::VirusScan::Result;
  1         3  
  1         309  
13              
14             sub default_arguments
15             {
16 5     5 0 32 return [ qw( --dumb --mime ) ];
17             }
18              
19             sub scan
20             {
21 0     0 1   my ($self, $path) = @_;
22              
23 0           my $abs = abs_path($path);
24 0 0 0       if ($abs && $abs ne $path) {
25 0           $path = $abs;
26             }
27              
28 0           my ($exitcode, $scan_response) = eval { $self->_run_commandline_scanner(join(' ', $self->{command}, @{ $self->{args} }, $path, '2>&1')); };
  0            
  0            
29              
30 0 0         if($@) {
31 0           return File::VirusScan::Result->error($@);
32             }
33              
34 0 0         if(0 == $exitcode) {
35 0           return File::VirusScan::Result->clean();
36             }
37              
38 0 0         if(1 == $exitcode) {
39 0           return File::VirusScan::Result->error('Abnormal termination');
40             }
41              
42 0 0         if(2 == $exitcode) {
43 0           return File::VirusScan::Result->error('Self-test failed');
44             }
45              
46 0 0 0       if(3 == $exitcode || 6 == $exitcode) {
47 0           my ($virus_name) = $scan_response =~ m/infec.*\: (\S+)/i;
48              
49 0 0         if($virus_name eq '') {
50 0           $virus_name = 'unknown-FSAV-virus';
51             }
52              
53 0           return File::VirusScan::Result->virus($virus_name);
54             }
55              
56 0 0         if(8 == $exitcode) {
57              
58             # Suspicious files found
59 0           return File::VirusScan::Result->virus('suspicious');
60             }
61              
62 0 0         if(5 == $exitcode) {
63 0           return File::VirusScan::Result->error('Scan interrupted');
64             }
65              
66 0 0         if(7 == $exitcode) {
67 0           return File::VirusScan::Result->error('Out of memory');
68             }
69              
70 0           return File::VirusScan::Result->error("Unknown return code from fsav: $exitcode");
71             }
72              
73             1;
74             __END__