You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2006/10/18 12:56:13 UTC
svn commit: r465206 - in /spamassassin/trunk:
lib/Mail/SpamAssassin/Message.pm lib/Mail/SpamAssassin/Message/Node.pm
lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm t/mimeheader.t
Author: jm
Date: Wed Oct 18 03:56:12 2006
New Revision: 465206
URL: http://svn.apache.org/viewvc?view=rev&rev=465206
Log:
bug 5127: allow mimeheader :raw rules to match newlines and folded-header whitespace in MIME header strings
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm
spamassassin/trunk/t/mimeheader.t
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm?view=diff&rev=465206&r1=465205&r2=465206
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm Wed Oct 18 03:56:12 2006
@@ -731,7 +731,7 @@
}
if (!$in_body) {
- s/\s+$//;
+ # s/\s+$//; # bug 5127: don't clean this up (yet)
if (m/^[\041-\071\073-\176]+:/) {
if ($header) {
my ( $key, $value ) = split ( /:\s*/, $header, 2 );
@@ -741,7 +741,7 @@
next;
}
elsif (/^[ \t]/) {
- $_ =~ s/^\s*//;
+ # $_ =~ s/^\s*//; # bug 5127, again
$header .= $_;
next;
}
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm?view=diff&rev=465206&r1=465205&r2=465206
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm Wed Oct 18 03:56:12 2006
@@ -170,7 +170,11 @@
$self->{'raw_headers'}->{$key} = [];
}
- push @{ $self->{'headers'}->{$key} }, $self->_decode_header($raw_value);
+ my $dec_value = $raw_value;
+ $dec_value =~ s/\n[ \t]+/ /gs;
+ $dec_value =~ s/\s*$//s;
+ push @{ $self->{'headers'}->{$key} }, $self->_decode_header($dec_value);
+
push @{ $self->{'raw_headers'}->{$key} }, $raw_value;
return $self->{'headers'}->{$key}->[-1];
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm?view=diff&rev=465206&r1=465205&r2=465206
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm Wed Oct 18 03:56:12 2006
@@ -46,8 +46,10 @@
Header names are considered case-insensitive.
-The header values are normally cleaned up a little. Append C<:raw> to the
-header name to retrieve the raw, undecoded value instead.
+The header values are normally cleaned up a little; for example, whitespace
+around the newline character in "folded" headers will be replaced with a single
+space. Append C<:raw> to the header name to retrieve the raw, undecoded value,
+including pristine whitespace, instead.
=back
@@ -168,7 +170,12 @@
}
foreach my $p ($scanner->{msg}->find_parts(qr/./)) {
- my $val = $p->get_header($hdr, $getraw);
+ my $val;
+ if ($getraw) {
+ $val = $p->raw_header($hdr);
+ } else {
+ $val = $p->get_header($hdr);
+ }
$val ||= $if_unset;
if ($val =~ ${pattern}) {
Modified: spamassassin/trunk/t/mimeheader.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/mimeheader.t?view=diff&rev=465206&r1=465205&r2=465206
==============================================================================
--- spamassassin/trunk/t/mimeheader.t (original)
+++ spamassassin/trunk/t/mimeheader.t Wed Oct 18 03:56:12 2006
@@ -2,7 +2,7 @@
use lib '.'; use lib 't';
use SATest; sa_t_init("mimeheader");
-use Test; BEGIN { plan tests => 2 };
+use Test; BEGIN { plan tests => 4 };
$ENV{'LANGUAGE'} = $ENV{'LC_ALL'} = 'C'; # a cheat, but we need the patterns to work
@@ -12,6 +12,8 @@
q{ MIMEHEADER_TEST1 }, q{ test1 },
q{ MIMEHEADER_TEST2 }, q{ test2 },
+ q{ MATCH_NL_NONRAW }, q{ match_nl_nonraw },
+ q{ MATCH_NL_RAW }, q{ match_nl_raw },
);
@@ -20,6 +22,9 @@
# loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
mimeheader MIMEHEADER_TEST1 content-type =~ /application\/msword/
mimeheader MIMEHEADER_TEST2 content-type =~ m!APPLICATION/MSWORD!i
+
+ mimeheader MATCH_NL_NONRAW Content-Type =~ /msword; name/
+ mimeheader MATCH_NL_RAW Content-Type:raw =~ /msword;\n\tname/
});