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 2007/04/20 15:14:49 UTC
svn commit: r530795 - in /spamassassin/trunk:
lib/Mail/SpamAssassin/Message.pm lib/Mail/SpamAssassin/Util.pm
spamassassin.raw t/line_endings.t
Author: jm
Date: Fri Apr 20 06:14:48 2007
New Revision: 530795
URL: http://svn.apache.org/viewvc?view=rev&rev=530795
Log:
bug 5344: use binmode() when creating temp files so that line endings are preserved sanely; add more test cases
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm
spamassassin/trunk/spamassassin.raw
spamassassin/trunk/t/line_endings.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=530795&r1=530794&r2=530795
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm Fri Apr 20 06:14:48 2007
@@ -111,7 +111,7 @@
$self->{pristine_headers} = '';
$self->{pristine_body} = '';
$self->{mime_boundary_state} = {};
- $self->{line_ending} = "\n";
+ $self->{line_ending} = "\012";
bless($self,$class);
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm?view=diff&rev=530795&r1=530794&r2=530795
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm Fri Apr 20 06:14:48 2007
@@ -972,6 +972,7 @@
# instead, we require O_EXCL|O_CREAT to guarantee us proper
# ownership of our file, read the open(2) man page
if (sysopen($tmpfile, $reportfile, O_RDWR|O_CREAT|O_EXCL, 0600)) {
+ binmode $tmpfile;
last;
}
Modified: spamassassin/trunk/spamassassin.raw
URL: http://svn.apache.org/viewvc/spamassassin/trunk/spamassassin.raw?view=diff&rev=530795&r1=530794&r2=530795
==============================================================================
--- spamassassin/trunk/spamassassin.raw (original)
+++ spamassassin/trunk/spamassassin.raw Fri Apr 20 06:14:48 2007
@@ -330,6 +330,7 @@
local $/ = undef; # go into slurp mode
( $tempfile, $handle ) = Mail::SpamAssassin::Util::secure_tmpfile();
+ binmode $handle;
print {$handle} <STDIN>;
close $handle;
Modified: spamassassin/trunk/t/line_endings.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/line_endings.t?view=diff&rev=530795&r1=530794&r2=530795
==============================================================================
--- spamassassin/trunk/t/line_endings.t (original)
+++ spamassassin/trunk/t/line_endings.t Fri Apr 20 06:14:48 2007
@@ -2,21 +2,29 @@
use lib '.'; use lib 't';
use SATest; sa_t_init("line_endings");
-use Test; BEGIN { plan tests => 14 };
+use Test; BEGIN { plan tests => 26 };
# ---------------------------------------------------------------------------
# Use a slightly modified gtube ...
my $origtest = 'data/spam/gtube.eml';
my $test = 'log/report_safe.eml';
+my $test2 = 'log/report_safe2.eml';
my $original = '';
-if (open(OTEST, $origtest) && open(TEST, ">$test")) {
+if (open(OTEST, $origtest) && open(TEST, ">$test") && open(TEST2, ">$test2")) {
+ binmode OTEST;
+ binmode TEST;
+ binmode TEST2;
+
local $/=undef;
$original .= "X-Spam-Prev-Subject: this is a test\n";
$original .= "X-Spam-Status: No, this should fail horribly!\n";
$original .= <OTEST>;
- print TEST $original;
+ $original =~ s/\r*\n/\r\n/gs; print TEST $original;
+ $original =~ s/\r*\n/\n/gs; print TEST2 $original;
+
close(TEST);
+ close(TEST2);
close(OTEST);
}
else {
@@ -63,6 +71,48 @@
%anti_patterns = ( q{ MISSING_HB_SEP }, 'hb_sep');
tstprefs ("report_safe 2\n");
sarun ("-L < $test", \&my_patterns_run);
+ok_all_patterns();
+count_line_endings($resulttext);
+if ($count_crnl) {
+ ok ($count_crnl!=0 && $count_nl==0);
+} else {
+ ok ($count_crnl==0 && $count_nl!=0);
+}
+
+# now with the other line-ending style...
+
+%patterns = ('X-Spam-Status: Yes' => 'XSS_Yes');
+%anti_patterns = ($original => P_1, 'X-Spam-Status: No' => 'XSS_No', q{ MISSING_HB_SEP }, 'hb_sep');
+tstprefs ("report_safe 0\n");
+sarun ("-L < $test2", \&my_patterns_run);
+ok_all_patterns();
+
+# support one *or* the other, depending on platform
+count_line_endings($resulttext);
+if ($count_crnl) {
+ ok ($count_crnl!=0 && $count_nl==0);
+} else {
+ ok ($count_crnl==0 && $count_nl!=0);
+}
+
+$message = safe($boundary, '', 'message/rfc822', $description, 'inline');
+%patterns = ($message => P_2, 'X-Spam-Status: Yes' => 'XSS_Yes');
+%anti_patterns = ( q{ MISSING_HB_SEP }, 'hb_sep');
+tstprefs ("report_safe 1\n");
+sarun ("-L < $test2", \&my_patterns_run);
+ok_all_patterns();
+count_line_endings($resulttext);
+if ($count_crnl) {
+ ok ($count_crnl!=0 && $count_nl==0);
+} else {
+ ok ($count_crnl==0 && $count_nl!=0);
+}
+
+$message = safe($boundary, '', 'text/plain', $description, 'inline');
+%patterns = ($message => P_3, 'X-Spam-Status: Yes' => 'XSS_Yes');
+%anti_patterns = ( q{ MISSING_HB_SEP }, 'hb_sep');
+tstprefs ("report_safe 2\n");
+sarun ("-L < $test2", \&my_patterns_run);
ok_all_patterns();
count_line_endings($resulttext);
if ($count_crnl) {