File Coverage

blib/lib/File/VirusScan/Engine/Command/CentralCommand/Vexira.pm
Criterion Covered Total %
statement 22 40 55.0
branch 0 10 0.0
condition 0 14 0.0
subroutine 8 9 88.8
pod 1 2 50.0
total 31 75 41.3


line stmt bran cond sub pod time code
1             package File::VirusScan::Engine::Command::CentralCommand::Vexira;
2 1     1   100449 use strict;
  1         6  
  1         25  
3 1     1   4 use warnings;
  1         2  
  1         18  
4 1     1   4 use Carp;
  1         2  
  1         51  
5              
6 1     1   339 use File::VirusScan::Engine::Command;
  1         2  
  1         6  
7 1     1   43 use vars qw( @ISA );
  1         1  
  1         38  
8             @ISA = qw( File::VirusScan::Engine::Command );
9              
10 1     1   5 use Cwd 'abs_path';
  1         2  
  1         35  
11              
12 1     1   360 use File::VirusScan::Result;
  1         3  
  1         339  
13              
14             sub default_arguments
15             {
16 5     5 0 34 return [qw(-qqq --log=/dev/null --all-files -as)];
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'), qr/: (?:virus|iworm|macro|mutant|sequence|trojan) /,); };
  0            
  0            
29              
30 0 0         if($@) {
31 0           return File::VirusScan::Result->error($@);
32             }
33              
34 0 0 0       if( 0 == $exitcode
35             || 9 == $exitcode)
36             {
37              
38             # 0 == OK
39             # 9 == Unknown file type (treated as "ok" for now)
40 0           return File::VirusScan::Result->clean();
41             }
42              
43 0 0 0       if( 3 == $exitcode
44             || 5 == $exitcode)
45             {
46 0           return File::VirusScan::Result->virus('vexira-password-protected-zip');
47             }
48              
49 0 0 0       if( 1 == $exitcode
50             || 2 == $exitcode)
51             {
52 0           my ($virus_name) = $scan_response =~ m/: (?:virus|iworm|macro|mutant|sequence|trojan) (\S+)/;
53 0   0       $virus_name ||= 'unknown-Vexira-virus';
54 0           return File::VirusScan::Result->virus($virus_name);
55             }
56              
57 0           return File::VirusScan::Result->error("Unknown return code from vexira: $exitcode");
58             }
59              
60             1;
61             __END__