~ubuntu-branches/ubuntu/utopic/spamassassin/utopic-proposed

« back to all changes in this revision

Viewing changes to lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm

  • Committer: Bazaar Package Importer
  • Author(s): Noah Meyerhans
  • Date: 2010-01-26 22:53:12 UTC
  • mfrom: (1.1.13 upstream) (5.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20100126225312-wkftb10idc1kz2aq
Tags: 3.3.0-1
* New upstream version.
* Switch to dpkg-source 3.0 (quilt) format

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
use strict;
43
43
use warnings;
44
44
use bytes;
 
45
use re 'taint';
45
46
 
46
47
use vars qw(@ISA);
47
48
@ISA = qw(Mail::SpamAssassin::Plugin);
112
113
  $conf->{skip_body_rules}   ||= { };
113
114
  $conf->{need_one_line_sub} ||= { };
114
115
 
 
116
  my %longname;
 
117
  foreach my $nameandflags (keys %{$hasrules}) {
 
118
    my $name = $nameandflags; $name =~ s/,\[.*?\]$//;
 
119
    $longname{$name} = $nameandflags;
 
120
  }
 
121
 
115
122
  my $found = 0;
116
123
  foreach my $name (keys %{$rules}) {
117
124
    my $rule = $rules->{$name};
118
 
    my $comprule = $hasrules->{$name};
 
125
    my $comprule = $hasrules->{$longname{$name} || ''};
119
126
    $rule =~ s/\#/\[hash\]/gs;
120
127
 
121
128
    if (!$comprule) { 
217
224
      # way to support this and still work with UTF-8 ok
218
225
      my $results = &{$modname.'::scan'}(lc $line);
219
226
 
220
 
      my %alreadydone = ();
221
 
      foreach my $rulename (@{$results})
 
227
      my %alreadydone;
 
228
      foreach my $ruleandflags (@{$results})
222
229
      {
223
230
        # only try each rule once per line
224
 
        next if exists $alreadydone{$rulename};
225
 
        $alreadydone{$rulename} = undef;
 
231
        next if exists $alreadydone{$ruleandflags};
 
232
        $alreadydone{$ruleandflags} = undef;
 
233
 
 
234
        my $rulename = $ruleandflags;
 
235
        my $flags = ($rulename =~ s/,\[(.*?)\]$//)?$1:'';
226
236
 
227
237
        # ignore 0-scored rules, of course
228
238
        next unless $scoresptr->{$rulename};
229
239
 
 
240
        # non-lossy rules; the re2c version matches exactly what
 
241
        # the perl regexp matches, so we don't need to perform
 
242
        # a validation match to follow up; it's a hit!
 
243
        if ($flags =~ /\bl=0/) {
 
244
          $scanner->got_hit($rulename, "BODY: ", ruletype => "one_line_body");
 
245
          # TODO: hit_rule_plugin_code? it's just debugging really
 
246
          next;
 
247
        }
 
248
 
230
249
        # dbg("zoom: base found for $rulename: $line");
231
250
        # }
232
251
 
259
278
 
260
279
  my $miss = $self->{rule2xs_misses};
261
280
  foreach my $r (sort { $miss->{$a} <=> $miss->{$b} } keys %{$miss}) {
262
 
    dbg "zoom: ".$miss->{$r}." misses for rule2xs rule $r\n";
 
281
    dbg("zoom: %s misses for rule2xs rule %s", $miss->{$r},$r);
263
282
  }
264
283
}
265
284