(Sorry for the broken threading. Started typing, before picking one of
the many possible posts for reply.)
I think I might have found a corner-case problem with the patch (in
trunk) for bug 6335. The problem appears to be, that $dnsbl_lookup_ips
and $is_ip are not independent.
+ my $cf = $scanner->{uridnsbl_active_rules_revipbl};
+ my $dnsbl_lookup_ips = 0;
+ foreach my $rulename (keys %{$cf}) {
+ if ($tflags->{$rulename} !~ /\bdomains_only\b/) {
+ $dnsbl_lookup_ips++;
$dnsbl_lookup_ips == 0 IFF *all* $tflags->{$rulename} *do*
match /domains_only/ (assumption (1)).
Due to
+ if ($dnsbl_lookup_ips && $dom =~ /^\d+\.\d+\.\d+\.\d+$/) {
$is_ip then also is 0, even if $dom indeed *is* an IP.
+ next if ($is_ip && $tflags->{$rulename} =~ /\bdomains_only\b/);
This test later on then fails to skip, because $is_ip is zero. Again,
even in the case of $dom actually being an IP. And the respective tflags
set to domains_only, as per the corner-case assumption of *all* such
rules having that tflag set.
Caveat: I did not yet figure out, which rules actually are in
$scanner->{uridnsbl_active_rules_revipbl}; which is the sub-set of
rules that need to satisfy the assumption (a).
--
char *t="\10pse\0r\0dtu...@ghno\x4e\xc8\x79\xf4\xab\x51\x8a\x10\xf4\xf4\xc4";
main(){ char h,m=h=*t++,*x=t+2*h,c,i,l=*x,s=0; for (i=0;i<l;i++){ i%8? c<<=1:
(c=*++x); c&128 && (s+=h); if (!(h>>=1)||!t[s+h]){ putchar(t[s]);h=m;s=0; }}}