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) {