> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> Robert Blayzor
> Sent: maandag 7 maart 2005 15:39
> To: ClamAV users ML
> Subject: Re: [Clamav-users] ClamAV 0.83 - Stream scanning timeout
>
>
> I'll give it a whirl, and yes, I seem to have it trapping error
> conditions. (unless something changed, this always worked)
> 
> eval {
>   local $SIG{ALRM} = sub { die "Stream timeout"; };
>   alarm $sc{TIME_OUT};
>   while(<$csock>) {
>     if (/(\S+)\ FOUND$/) {
>       $vs = $1 unless ($vs);
>       $vf++;
>     }
>     $err = $1 if ($r =~ /^ERROR\:(.*)/);
>   }
>   alarm 0;
> };
> $err = $@ if($@);
> 

Perl signals are not always as local as they may seem. :) You really might
want to reset the alarm after the eval {} loop as well (in case you
break out uncleanly from it). Consider the following:


-------------------------------
#!/usr/local/bin/perl

sub clam_test {
    eval {
        local $SIG{ALRM} = sub { die "Timeout\n" };
        alarm 2;
    };
}

clam_test ();

print "Back!\n";

sleep 4;

print "Made it past the signal!\n";

exit 0;
-------------------------------


You'll never get "past the signal" here (Perl 5.8.6). Nor here:


-------------------------------
#!/usr/local/bin/perl

sub clam_test {
    eval {
        local $SIG{ALRM} = sub { die "Timeout\n" };
        alarm 2;
        die "Oops!\n";
    };
}

clam_test ();

print "Back!\n";

sleep 4;

print "Made it past the signal!\n";

exit 0;
-------------------------------

- Mark

_______________________________________________
http://lurker.clamav.net/list/clamav-users.html

Reply via email to