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 2022/03/13 07:13:13 UTC

svn commit: r1898892 - in /spamassassin/trunk: MANIFEST lib/Mail/SpamAssassin/Conf.pm lib/Mail/SpamAssassin/Conf/Parser.pm lib/Mail/SpamAssassin/Plugin/Check.pm t/header.t

Author: hege
Date: Sun Mar 13 07:13:13 2022
New Revision: 1898892

URL: http://svn.apache.org/viewvc?rev=1898892&view=rev
Log:
- Header :first :last modifiers did not work at all before (feature_header_first_last)
- Allow matching all :addr :name etc modifier results (feature_header_match_many)

Added:
    spamassassin/trunk/t/header.t   (with props)
Modified:
    spamassassin/trunk/MANIFEST
    spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm

Modified: spamassassin/trunk/MANIFEST
URL: http://svn.apache.org/viewvc/spamassassin/trunk/MANIFEST?rev=1898892&r1=1898891&r2=1898892&view=diff
==============================================================================
--- spamassassin/trunk/MANIFEST (original)
+++ spamassassin/trunk/MANIFEST Sun Mar 13 07:13:13 2022
@@ -505,6 +505,7 @@ t/freemail_welcome_block.t
 t/get_all_headers.t
 t/get_headers.t
 t/gtube.t
+t/header.t
 t/header_utf8.t
 t/html_colors.t
 t/html_obfu.t

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm?rev=1898892&r1=1898891&r2=1898892&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm Sun Mar 13 07:13:13 2022
@@ -5445,6 +5445,8 @@ sub feature_get_host { 1 } # $pms->get()
 sub feature_blocklist_welcomelist { 1 } # bz 7826
 sub feature_header_address_parser { 1 } # improved header address parsing using Email::Address::XS, $pms->get() list context
 sub feature_local_tests_only { 1 } # Config parser supports "if (local_tests_only)"
+sub feature_header_first_last { 1 } # Can actually use :first :last modifiers in rules
+sub feature_header_match_many { 1 } # Can actually match all :addr :name etc results, before only first one was used
 sub has_tflags_nosubject { 1 } # tflags nosubject
 sub has_tflags_nolog { 1 } # tflags nolog
 sub perl_min_version_5010000 { return $] >= 5.010000 }  # perl version check ("perl_version" not neatly backwards-compatible)

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm?rev=1898892&r1=1898891&r2=1898892&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm Sun Mar 13 07:13:13 2022
@@ -1342,7 +1342,7 @@ sub add_test {
       }
       my ($hdr, $op, $pat) = ($1, $2, $3);
       $hdr =~ s/:$//;
-      if ($hdr =~ /:(?!(?:raw|addr|name|host|domain|ip|revip)\b)/i) {
+      if ($hdr =~ /:(?!(?:raw|addr|name|host|domain|ip|revip|first|last)\b)/i) {
         $self->lint_warn("config: invalid header modifier for $name: $hdr", $name);
         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=1898892&r1=1898891&r2=1898892&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm Sun Mar 13 07:13:13 2022
@@ -688,7 +688,7 @@ sub do_head_tests {
     my ($self, $pms, $conf, %opts) = @_;
     $self->push_evalstr_prefix($pms, '
       no warnings q(uninitialized);
-      my $hval;
+      my $hval; my @harr;
     ');
   },
     post_loop_body => sub
@@ -698,9 +698,10 @@ sub do_head_tests {
     while(my($k,$v) = each %ordered) {
       my($hdrname, $def) = split(/\t/, $k, 2);
       $self->push_evalstr_prefix($pms, '
-        $hval = $self->get(q{'.$hdrname.'}, ' .
+        @harr = $self->get(q{'.$hdrname.'});
+        $hval = scalar(@harr) ? join("\n", @harr) : ' .
                            (!defined($def) ? 'undef' :
-                              '$self->{conf}->{test_opt_unset}->{q{'.$def.'}}') . ');
+                              '$self->{conf}->{test_opt_unset}->{q{'.$def.'}}') . ';
       ');
       foreach my $rulename (@{$v}) {
           my $tc_ref = $testcode{$rulename};

Added: spamassassin/trunk/t/header.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/header.t?rev=1898892&view=auto
==============================================================================
--- spamassassin/trunk/t/header.t (added)
+++ spamassassin/trunk/t/header.t Sun Mar 13 07:13:13 2022
@@ -0,0 +1,63 @@
+#!/usr/bin/perl -T
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("header");
+use Test::More tests => 14;
+
+# ---------------------------------------------------------------------------
+
+tstprefs('
+  # Test 4.0 multiple :addr parser
+  header TO1 To:addr =~ /(?:@.*?){1}/s
+  header TONEG1 To:addr =~ /(?:@.*?){2}/s
+  header CC1 Cc:addr =~ /(?:@.*?){5}/s
+  header CCNEG1 Cc:addr =~ /(?:@.*?){6}/s
+  header TOCC1 ToCc:addr =~ /(?:@.*?){6}/s
+  header TOCCNEG1 ToCc:addr =~ /(?:@.*?){7}/s
+  header __TO_COUNT To:addr =~ /^.+$/m
+  tflags __TO_COUNT multiple
+  meta TO2 __TO_COUNT == 1
+  header __CC_COUNT Cc:addr =~ /^.+$/m
+  tflags __CC_COUNT multiple
+  meta CC2 __CC_COUNT == 5
+  header __TOCC_COUNT ToCc:addr =~ /^.+$/m
+  tflags __TOCC_COUNT multiple
+  meta TOCC2 __TOCC_COUNT == 6
+');
+
+%patterns = (
+  q{ 1.0 TO1 }, '',
+  q{ 1.0 CC1 }, '',
+  q{ 1.0 TOCC1 }, '',
+  q{ 1.0 TO2 }, '',
+  q{ 1.0 CC2 }, '',
+  q{ 1.0 TOCC2 }, '',
+);
+%anti_patterns = (
+  q{ 1.0 TONEG }, '',
+  q{ 1.0 CCNEG }, '',
+  q{ 1.0 TOCCNEG }, '',
+);
+
+ok (sarun ("-L -t < data/nice/006", \&patterns_run_cb));
+ok_all_patterns();
+
+##########################################
+
+tstprefs('
+  # Test 4.0 :first :last parser
+  header HEADER_FIRST1 X-Hashcash:first =~ /^0:040315:test@example.com:69781c87bae95c03$/
+  header HEADER_LAST1 X-Hashcash:last =~ /^1:20:040806:test1@example.com:test=foo:482b788d12eb9b56:2a3349$/
+  header HEADER_ALL1 X-Hashcash =~ /^0:040315:.*1:20:040806:/s
+');
+
+%patterns = (
+  q{ 1.0 HEADER_FIRST1 }, '',
+  q{ 1.0 HEADER_LAST1 }, '',
+  q{ 1.0 HEADER_ALL1 }, '',
+);
+%anti_patterns = ();
+
+ok (sarun ("-D -L -t < data/nice/001 2>&1", \&patterns_run_cb));
+ok_all_patterns();
+

Propchange: spamassassin/trunk/t/header.t
------------------------------------------------------------------------------
    svn:executable = *