You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2019/07/07 11:06:23 UTC

svn commit: r1862688 - in /spamassassin/trunk/lib/Mail/SpamAssassin: Conf/Parser.pm Plugin/DKIM.pm Plugin/FromNameSpoof.pm Plugin/SPF.pm Plugin/VBounce.pm Plugin/WLBLEval.pm Plugin/WhiteListSubject.pm

Author: hege
Date: Sun Jul  7 11:06:22 2019
New Revision: 1862688

URL: http://svn.apache.org/viewvc?rev=1862688&view=rev
Log:
Use compile_regex for addrlist entries

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/FromNameSpoof.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/VBounce.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WLBLEval.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WhiteListSubject.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm Sun Jul  7 11:06:22 2019
@@ -1427,7 +1427,12 @@ sub add_to_addrlist {
     $re =~ s/([^\*\?_a-zA-Z0-9])/\\$1/g;	# escape any possible metachars
     $re =~ tr/?/./;				# "?" -> "."
     $re =~ s/\*+/\.\*/g;			# "*" -> "any string"
-    $conf->{$singlelist}->{$addr} = "^${re}\$";
+    my ($rec, $err) = compile_regexp("^${re}\$", 0);
+    if (!$rec) {
+      warn "could not compile $singlelist '$addr': $err";
+      return;
+    }
+    $conf->{$singlelist}->{$addr} = $rec;
   }
 }
 
@@ -1446,7 +1451,12 @@ sub add_to_addrlist_rcvd {
     $re =~ s/([^\*\?_a-zA-Z0-9])/\\$1/g;	# escape any possible metachars
     $re =~ tr/?/./;				# "?" -> "."
     $re =~ s/\*+/\.\*/g;			# "*" -> "any string"
-    $conf->{$listname}->{$addr}{re} = "^${re}\$";
+    my ($rec, $err) = compile_regexp("^${re}\$", 0);
+    if (!$rec) {
+      warn "could not compile $listname '$addr': $err";
+      return;
+    }
+    $conf->{$listname}->{$addr}{re} = $rec;
     $conf->{$listname}->{$addr}{domain} = [ $domain ];
   }
 }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm Sun Jul  7 11:06:22 2019
@@ -1193,12 +1193,12 @@ sub _wlcheck_acceptable_signature {
   foreach my $author (@{$pms->{dkim_author_addresses}}) {
     foreach my $white_addr (keys %$wl_ref) {
       my $wl_addr_ref = $wl_ref->{$white_addr};
-      my $re = qr/$wl_addr_ref->{re}/i;
+      my $re = $wl_addr_ref->{re};
     # dbg("dkim: WL %s %s, d: %s", $wl, $white_addr,
     #     join(", ", map { $_ eq '' ? "''" : $_ } @{$wl_addr_ref->{domain}}));
-      if ($author =~ $re) {
+      if (lc($author) =~ $re) {
         foreach my $sdid (@{$wl_addr_ref->{domain}}) {
-          push(@$acceptable_sdid_tuples_ref, [$author,$sdid,$wl,$re]);
+          push(@$acceptable_sdid_tuples_ref, [$author,$sdid,$wl,$white_addr]);
         }
       }
     }
@@ -1216,8 +1216,8 @@ sub _wlcheck_author_signature {
     foreach my $white_addr (keys %$wl_ref) {
       my $re = $wl_ref->{$white_addr};
     # dbg("dkim: WL %s %s", $wl, $white_addr);
-      if ($author =~ $re) {
-        push(@$acceptable_sdid_tuples_ref, [$author,undef,$wl,$re]);
+      if (lc($author) =~ $re) {
+        push(@$acceptable_sdid_tuples_ref, [$author,undef,$wl,$white_addr]);
       }
     }
   }
@@ -1257,8 +1257,8 @@ sub _wlcheck_list {
 
     my %tried_authors;
     foreach my $entry (@$acceptable_sdid_tuples_ref) {
-      my($author, $acceptable_sdid, $wl, $re) = @$entry;
-      # $re and $wl are here for logging purposes only, $re already checked.
+      my($author, $acceptable_sdid, $wl, $white_addr) = @$entry;
+      # $white_addr and $wl are here for logging purposes only, already checked.
       # The $acceptable_sdid is a verifier-acceptable signing domain
       # identifier (to be matched against a 'd' tag in signatures).
       # When $acceptable_sdid is undef or an empty string it implies
@@ -1299,10 +1299,10 @@ sub _wlcheck_list {
         if (would_log("dbg","dkim")) {
           if ($sdid eq $author_domain) {
             dbg("dkim: %s author domain signature by %s, MATCHES %s %s",
-                $info, $sdid, $wl, $re);
+                $info, $sdid, $wl, $white_addr);
           } else {
             dbg("dkim: %s third-party signature by %s, author domain %s, ".
-                "MATCHES %s %s", $info, $sdid, $author_domain, $wl, $re);
+                "MATCHES %s %s", $info, $sdid, $author_domain, $wl, $white_addr);
           }
         }
         # a defined value indicates at least a match, not necessarily valid

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/FromNameSpoof.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/FromNameSpoof.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/FromNameSpoof.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/FromNameSpoof.pm Sun Jul  7 11:06:22 2019
@@ -411,8 +411,7 @@ sub _find_address_owner
   my ($self, $check, $list_refs) = @_;
   foreach my $owner (keys %{$list_refs}) {
     foreach my $white_addr (keys %{$list_refs->{$owner}}) {
-      my $regexp = qr/$list_refs->{$owner}{$white_addr}/i;
-      if ($check =~ /$regexp/)  {
+      if ($check =~ $list_refs->{$owner}{$white_addr}) {
         $owner =~ s/^FNS_//i;
         return lc $owner;
       }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SPF.pm Sun Jul  7 11:06:22 2019
@@ -793,7 +793,7 @@ sub _wlcheck {
     return 1;
   } else {
     foreach my $regexp (values %{$scanner->{conf}->{$param}}) {
-      if ($scanner->{spf_sender} =~ /$regexp/) {
+      if ($scanner->{spf_sender} =~ $regexp) {
         return 1;
       }
     }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/VBounce.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/VBounce.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/VBounce.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/VBounce.pm Sun Jul  7 11:06:22 2019
@@ -167,7 +167,7 @@ sub _relay_is_in_list {
   if (defined $list->{$relay}) { return 1; }
 
   foreach my $regexp (values %{$list}) {
-    if ($relay =~ qr/$regexp/i) {
+    if ($relay =~ $regexp) {
       dbg("rules: relay $relay matches regexp: $regexp");
       return 1;
     }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WLBLEval.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WLBLEval.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WLBLEval.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WLBLEval.pm Sun Jul  7 11:06:22 2019
@@ -328,7 +328,7 @@ sub _check_whitelist_rcvd {
   $addr = lc $addr;
   my $found_forged = 0;
   foreach my $white_addr (keys %{$list}) {
-    my $regexp = qr/$list->{$white_addr}{re}/i;
+    my $regexp = $list->{$white_addr}{re};
     foreach my $domain (@{$list->{$white_addr}{domain}}) {
       # $domain is a second param in whitelist_from_rcvd: a domain name or an IP address
       
@@ -408,7 +408,7 @@ sub _check_whitelist {
   $addr = lc $addr;
   if (defined ($list->{$addr})) { return 1; }
   foreach my $regexp (values %{$list}) {
-    if ($addr =~ qr/$regexp/i) {
+    if ($addr =~ $regexp) {
       dbg("rules: address $addr matches whitelist or blacklist regexp: $regexp");
       return 1;
     }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WhiteListSubject.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WhiteListSubject.pm?rev=1862688&r1=1862687&r2=1862688&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WhiteListSubject.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/WhiteListSubject.pm Sun Jul  7 11:06:22 2019
@@ -44,6 +44,7 @@ similar to the other whitelist_* config
 package Mail::SpamAssassin::Plugin::WhiteListSubject;
 
 use Mail::SpamAssassin::Plugin;
+use Mail::SpamAssassin::Util qw(compile_regexp);
 use strict;
 use warnings;
 # use bytes;
@@ -82,11 +83,15 @@ sub set_config {
 
 		 $value = lc $value;
 		 my $re = $value;
-		 $re =~ s/[\000\\\(]/_/gs;                   # paranoia
 		 $re =~ s/([^\*\?_a-zA-Z0-9])/\\$1/g;        # escape any possible metachars
 		 $re =~ tr/?/./;                             # "?" -> "."
                  $re =~ s/\*+/\.\*/g;                        # "*" -> "any string"
-		 $conf->{$key}->{$value} = ${re};
+                 my ($rec, $err) = compile_regexp($re, 0);
+                 if (!$rec) {
+                   warn "could not compile $key '$value': $err";
+                   return;
+                 }
+ 		 $conf->{$key}->{$value} = $rec;
 	       }});
 
   push(@cmds, {
@@ -98,11 +103,15 @@ sub set_config {
 
 		 $value = lc $value;
 		 my $re = $value;
-		 $re =~ s/[\000\\\(]/_/gs;                   # paranoia
 		 $re =~ s/([^\*\?_a-zA-Z0-9])/\\$1/g;        # escape any possible metachars
 		 $re =~ tr/?/./;                             # "?" -> "."
                  $re =~ s/\*+/\.\*/g;                        # "*" -> "any string"
-		 $conf->{$key}->{$value} = ${re};
+                 my ($rec, $err) = compile_regexp($re, 0);
+                 if (!$rec) {
+                   warn "could not compile $key '$value': $err";
+                   return;
+                 }
+ 		 $conf->{$key}->{$value} = $rec;
 	       }});
 
   $conf->{parser}->register_commands(\@cmds);
@@ -136,7 +145,7 @@ sub _check_subject {
   return 1 if defined($list->{$subject});
 
   foreach my $regexp (values %{$list}) {
-    if ($subject =~ qr/$regexp/i) {
+    if ($subject =~ $regexp) {
       return 1;
     }
   }