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/
 
 	});