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 2009/09/19 07:41:42 UTC

svn commit: r816855 - in /spamassassin/trunk: lib/Mail/SpamAssassin/PerMsgStatus.pm t/get_headers.t

Author: jm
Date: Sat Sep 19 05:41:41 2009
New Revision: 816855

URL: http://svn.apache.org/viewvc?rev=816855&view=rev
Log:
bug 5201: fix some cases where :addr headers were parsed incorrectly

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
    spamassassin/trunk/t/get_headers.t

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm?rev=816855&r1=816854&r2=816855&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm Sat Sep 19 05:41:41 2009
@@ -1478,7 +1478,7 @@
     local $1;
     while ($request =~ s/:([^:]*)//) {
       if    ($1 eq 'raw')  { $getraw  = 1 }
-      elsif ($1 eq 'addr') { $getaddr = 1 }
+      elsif ($1 eq 'addr') { $getaddr = $getraw = 1 }
       elsif ($1 eq 'name') { $getname = 1 }
     }
   }
@@ -1584,10 +1584,12 @@
       #
       # strip out the (comments)
       $result =~ s/\s*\(.*?\)//g;
-      # strip out the "quoted text"
-      $result =~ s/(?<!<)"[^"]*"(?!@)//g;   #" emacs
+      # strip out the "quoted text", unless it's the only thing in the string
+      if ($result !~ /^".*"$/) {
+        $result =~ s/(?<!<)"[^"]*"(?!@)//g;   #" emacs
+      }
       # Foo Blah <jm...@xxx> or <jm...@xxx>
-      $result =~ s/^[^<]*?<(.*?)>.*$/$1/;
+      $result =~ s/^[^"<]*?<(.*?)>.*$/$1/;
       # multiple addresses on one line? remove all but first
       $result =~ s/,.*$//;
     }

Modified: spamassassin/trunk/t/get_headers.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/get_headers.t?rev=816855&r1=816854&r2=816855&view=diff
==============================================================================
--- spamassassin/trunk/t/get_headers.t (original)
+++ spamassassin/trunk/t/get_headers.t Sat Sep 19 05:41:41 2009
@@ -18,44 +18,18 @@
 use strict;
 use Test;
 use SATest; sa_t_init("get_headers");
-
 use Mail::SpamAssassin;
 
-plan tests => 13;
+plan tests => 16;
 
 ##############################################
 
 # initialize SpamAssassin
 my $sa = create_saobj({'dont_copy_prefs' => 1});
-
-$sa->init(0); # parse rules
-
-my $raw_message = <<'EOF';
-To1: <jm...@foo>
-To2: jm@foo
-To3: jm@foo (Foo Blah)
-To4: jm@foo, jm@bar
-To5: display: jm@foo (Foo Blah), jm@bar ;
-To6: Foo Blah <jm...@foo>
-To7: "Foo Blah" <jm...@foo>
-To8: "'Foo Blah'" <jm...@foo>
-To9: "_$B!z8=6b$=$N>l$GEv$?$j!*!zEv_(B_$B$?$k!*!)$/$8!z7|>^%\%s%P!<!z_(B" <jm...@foo>
-To10: "Some User" <"Some User"@foo>
-Hdr1:    foo  
-  bar
-	baz 
-  
-To11: "Some User"@foo
-
-Blah!
-
-EOF
-
-my $mail = $sa->parse( $raw_message );
+$sa->init(0);
+my $mail = $sa->parse( get_raw_headers()."\n\nBlah\n" );
 my $msg = Mail::SpamAssassin::PerMsgStatus->new($sa, $mail);
 
-##############################################
-
 sub try {
   my ($try, $expect) = @_;
   my $result = $msg->get($try);
@@ -78,6 +52,32 @@
   }
 }
 
+##############################################
+
+sub get_raw_headers {
+  return q{To1: <jm...@foo>
+To2: jm@foo
+To3: jm@foo (Foo Blah)
+To4: jm@foo, jm@bar
+To5: display: jm@foo (Foo Blah), jm@bar ;
+To6: Foo Blah <jm...@foo>
+To7: "Foo Blah" <jm...@foo>
+To8: "'Foo Blah'" <jm...@foo>
+To9: "_$B!z8=6b$=$N>l$GEv$?$j!*!zEv_(B_$B$?$k!*!)$/$8!z7|>^%\%s%P!<!z_(B" <jm...@foo>
+To10: "Some User" <"Some User"@foo>
+Hdr1:    foo  
+  bar
+	baz 
+  
+To11: "Some User"@foo
+To_bug5201_a: =?ISO-2022-JP?B?GyRCQjw+ZRsoQiAbJEI1V0JlGyhC?= <jm...@foo>
+To_bug5201_b: =?ISO-2022-JP?B?GyRCNiVHTyM3JSQlcyU1JSQlQCE8PnBKcxsoQg==?= <jm...@foo>
+To_bug5201_c: "joe+<blah>@example.com"
+};
+}
+
+##############################################
+
 ok(try('To1:addr', 'jm@foo'));
 ok(try('To2:addr', 'jm@foo'));
 ok(try('To3:addr', 'jm@foo'));
@@ -91,4 +91,7 @@
 ok(try('To11:addr', '"Some User"@foo'));
 ok(try('Hdr1', "foo   bar baz\n"));
 ok(try('Hdr1:raw', "    foo  \n  bar\n\tbaz \n  \n"));
+ok(try('To_bug5201_a:addr', 'jm@foo'));
+ok(try('To_bug5201_b:addr', 'jm@foo'));
+ok(try('To_bug5201_c:addr', '"joe+<blah>@example.com"'));