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"'));