Folks,
I have about 16 viruses that are not being caught by the 0.90.1 version as
opposed to 0.88.5. I think the problem looks to be in the cli_ac_scanbuff
function.
In 0.88.5 version they are caught within the:
if(pt->sigid) { /* it's a partial signature */
if(partcnt[pt->sigid] + 1 == pt->partno) {
dist = 1;
if(pt->maxdist)
if(offset + i - partoff[pt->sigid] >
pt->maxdist)
dist = 0;
if(dist && pt->mindist)
if(offset + i - partoff[pt->sigid] <
pt->mindist)
dist = 0;
if(dist) {
partoff[pt->sigid] = offset + i +
pt->length;
if(++partcnt[pt->sigid] == pt->parts) { /*
the last one */
if(pt->type) {
if(otfrec) {
if(pt->type > type) {
cli_dbgmsg("Matched
signature for file type: %s\n", pt->virname);
type = pt->type;
}
}
} else { /*****************RETURNS virus
here*********************/
if(virname)
*virname = pt->virname;
return CL_VIRUS;
}
}
}
}
} else { /* old type signature */
However in the 0.90.1 it does not enter the corresponding code portion.
So the output for 0.88.5 looks like this:
Scanning through Win32.Alcaul.i
Found virus: W32.Kruls.Gen
Scanning through Win32.Alcaul.j
Found virus: W32.Kruls.Gen
Scanning through Win32.Bolzano.3100
Found virus: W32.Bolzano.Gen
Scanning through Win32.Bolzano.3148
Found virus: W32.Bolzano.Gen
Scanning through Win32.Bolzano.3164
Found virus: W32.Bolzano.Gen
Scanning through Win32.Bolzano.3192
Found virus: W32.Bolzano.Gen
Scanning through Win32.Champ
Found virus: W32.Champagne.Gen
Scanning through Win32.Champ.5536
Found virus: W32.Champagne.Gen
Scanning through Win32.Champ.5714
Found virus: W32.Champagne.Gen
Scanning through Win32.Champ.5722
Found virus: W32.Champagne.Gen
Scanning through Win32.Opdoc.1248
Found virus: W32.Opdoc.Gen
Scanning through Win32.Small.1700
Found virus: W32.Small.1700
Scanning through Win32.Wide.b
Found virus: W32.Wide.Gen
and for the 0.90.1 all are returned as Clean.
Also on another note I had to add the following to cli_ac_scanbuff in
0.90.1to avoid segmentation faults happening while scanning some
viruses:
if(current == NULL)
continue;
current = current->trans[buffer[i] & 0xff];
if(current == NULL)
continue;
if(current->islast) {
position = i - ac_depth + 1;
Any help in pointing me to the right direction will be appreciated. I can
provide the viruses if need be.
Thanks
_______________________________________________
Help us build a comprehensive ClamAV guide: visit http://wiki.clamav.net
http://lurker.clamav.net/list/clamav-users.html