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 2020/04/10 20:38:45 UTC

svn commit: r1876381 - in /spamassassin: branches/3.4/lib/Mail/SpamAssassin/Conf/Parser.pm branches/3.4/lib/Mail/SpamAssassin/Plugin/Check.pm trunk/lib/Mail/SpamAssassin/Conf/Parser.pm trunk/lib/Mail/SpamAssassin/Plugin/Check.pm

Author: hege
Date: Fri Apr 10 20:38:45 2020
New Revision: 1876381

URL: http://svn.apache.org/viewvc?rev=1876381&view=rev
Log:
Fix header rule parsing

Modified:
    spamassassin/branches/3.4/lib/Mail/SpamAssassin/Conf/Parser.pm
    spamassassin/branches/3.4/lib/Mail/SpamAssassin/Plugin/Check.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm

Modified: spamassassin/branches/3.4/lib/Mail/SpamAssassin/Conf/Parser.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.4/lib/Mail/SpamAssassin/Conf/Parser.pm?rev=1876381&r1=1876380&r2=1876381&view=diff
==============================================================================
--- spamassassin/branches/3.4/lib/Mail/SpamAssassin/Conf/Parser.pm (original)
+++ spamassassin/branches/3.4/lib/Mail/SpamAssassin/Conf/Parser.pm Fri Apr 10 20:38:45 2020
@@ -1244,9 +1244,9 @@ sub add_test {
     # no re "strict";  # since perl 5.21.8: Ranges of ASCII printables...
     if ($text =~ /^exists:(.*)/) {
       my $hdr = $1;
-      # never evaled, so can be quite generous with the name
       # check :addr etc header options
-      if ($hdr !~ /^[^:\s]+:?$/) {
+      # $hdr used in eval text, validate carefully
+      if ($hdr !~ /^[\w.-]+:?$/) {
         $self->lint_warn("config: invalid head test $name header: $hdr");
         return;
       }
@@ -1254,7 +1254,8 @@ sub add_test {
       $conf->{test_opt_header}->{$name} = $hdr;
       $conf->{test_opt_exists}->{$name} = 1;
     } else {
-      if ($text !~ /^([^:\s]+(?:\:|(?:\:[a-z]+){1,2})?)\s*([=!]~)\s*(.+)$/) {
+      # $hdr used in eval text, validate carefully
+      if ($text !~ /^([\w.-]+(?:\:|(?:\:[a-z]+){1,2})?)\s*([=!]~)\s*(.+)$/) {
         $self->lint_warn("config: invalid head test $name: $text");
         return;
       }

Modified: spamassassin/branches/3.4/lib/Mail/SpamAssassin/Plugin/Check.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.4/lib/Mail/SpamAssassin/Plugin/Check.pm?rev=1876381&r1=1876380&r2=1876381&view=diff
==============================================================================
--- spamassassin/branches/3.4/lib/Mail/SpamAssassin/Plugin/Check.pm (original)
+++ spamassassin/branches/3.4/lib/Mail/SpamAssassin/Plugin/Check.pm Fri Apr 10 20:38:45 2020
@@ -716,7 +716,7 @@ sub do_head_tests {
     }
 
     my $def = $conf->{test_opt_unset}->{$rulename};
-    push(@{ $ordered{$hdrname . (!defined $def ? '' : "\t".$def)} },
+    push(@{ $ordered{$hdrname . (!defined $def ? '' : "\t$rulename")} },
          $rulename);
 
     return if ($opts{doing_user_rules} &&
@@ -740,7 +740,8 @@ sub do_head_tests {
       my($hdrname, $def) = split(/\t/, $k, 2);
       $self->push_evalstr_prefix($pms, '
         $hval = $self->get(q{'.$hdrname.'}, ' .
-                           (!defined($def) ? 'undef' : 'q{'.$def.'}') . ');
+                           (!defined($def) ? 'undef' :
+                              '$self->{conf}->{test_opt_unset}->{q{'.$def.'}}') . ');
       ');
       foreach my $rulename (@{$v}) {
           my $tc_ref = $testcode{$rulename};

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm?rev=1876381&r1=1876380&r2=1876381&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm Fri Apr 10 20:38:45 2020
@@ -1258,9 +1258,9 @@ sub add_test {
     # no re "strict";  # since perl 5.21.8: Ranges of ASCII printables...
     if ($text =~ /^exists:(.*)/) {
       my $hdr = $1;
-      # never evaled, so can be quite generous with the name
       # check :addr etc header options
-      if ($hdr !~ /^[^:\s]+:?$/) {
+      # $hdr used in eval text, validate carefully
+      if ($hdr !~ /^[\w.-]+:?$/) {
         $self->lint_warn("config: invalid head test $name header: $hdr");
         return;
       }
@@ -1268,7 +1268,8 @@ sub add_test {
       $conf->{test_opt_header}->{$name} = $hdr;
       $conf->{test_opt_exists}->{$name} = 1;
     } else {
-      if ($text !~ /^([^:\s]+(?:\:|(?:\:[a-z]+){1,2})?)\s*([=!]~)\s*(.+)$/) {
+      # $hdr used in eval text, validate carefully
+      if ($text !~ /^([\w.-]+(?:\:|(?:\:[a-z]+){1,2})?)\s*([=!]~)\s*(.+)$/) {
         $self->lint_warn("config: invalid head test $name: $text");
         return;
       }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm?rev=1876381&r1=1876380&r2=1876381&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm Fri Apr 10 20:38:45 2020
@@ -722,7 +722,7 @@ sub do_head_tests {
     }
 
     my $def = $conf->{test_opt_unset}->{$rulename};
-    push(@{ $ordered{$hdrname . (!defined $def ? '' : "\t".$def)} },
+    push(@{ $ordered{$hdrname . (!defined $def ? '' : "\t$rulename")} },
          $rulename);
 
     return if ($opts{doing_user_rules} &&
@@ -746,7 +746,8 @@ sub do_head_tests {
       my($hdrname, $def) = split(/\t/, $k, 2);
       $self->push_evalstr_prefix($pms, '
         $hval = $self->get(q{'.$hdrname.'}, ' .
-                           (!defined($def) ? 'undef' : 'q{'.$def.'}') . ');
+                           (!defined($def) ? 'undef' :
+                              '$self->{conf}->{test_opt_unset}->{q{'.$def.'}}') . ');
       ');
       foreach my $rulename (@{$v}) {
           my $tc_ref = $testcode{$rulename};