You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2014/09/30 14:30:58 UTC

svn commit: r1628419 - /spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm

Author: mmartinec
Date: Tue Sep 30 12:30:58 2014
New Revision: 1628419

URL: http://svn.apache.org/r1628419
Log:
Plugin/HeaderEval: header field names are case-insensitive, (plus a tiny speedup)

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm?rev=1628419&r1=1628418&r2=1628419&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HeaderEval.pm Tue Sep 30 12:30:58 2014
@@ -267,26 +267,27 @@ sub check_illegal_chars {
 
   $header .= ":raw" unless ($header eq "ALL" || $header =~ /:raw$/);
   my $str = $pms->get($header);
-  return 0 unless $str ne '';
+  return 0 if !defined $str || $str eq '';
 
   # avoid overlap between tests
   if ($header eq "ALL") {
     # fix continuation lines, then remove Subject and From
     $str =~ s/\n[ \t]+/  /gs;
-    $str =~ s/^(?:Subject|From):.*$//gm;
+    $str =~ s/^(?:Subject|From):.*$//gmi;
   }
 
   # count illegal substrings (RFC 2045)
-  my $illegal = () = ($str =~ /[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff]/g);
+  # (non-ASCII + C0 controls except TAB, NL, CR)
+  my $illegal = $str =~ tr/\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff//;
 
   # minor exemptions for Subject
-  if ($header eq "Subject:raw") {
+  if ($illegal > 0 && lc $header eq "subject:raw") {
     # only exempt a single cent sign, pound sign, or registered sign
-    my $exempt = () = ($str =~ /[\xa2\xa3\xae]/g);
+    my $exempt = $str =~ tr/\xa2\xa3\xae//;
     $illegal-- if $exempt == 1;
   }
 
-  return 0 if (length($str) == 0);
+  return 0 if $str eq '';
   return (($illegal / length($str)) >= $ratio && $illegal >= $count);
 }