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 = *