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 2004/02/19 00:29:29 UTC

svn commit: rev 6734 - in incubator/spamassassin/trunk: . lib/Mail/SpamAssassin t

Author: jm
Date: Wed Feb 18 15:29:28 2004
New Revision: 6734

Added:
   incubator/spamassassin/trunk/t/reportheader_8bit.t   (contents, props changed)
Modified:
   incubator/spamassassin/trunk/MANIFEST
   incubator/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
   incubator/spamassassin/trunk/t/reportheader.t
Log:
bug 2542: translated X-Spam-Report header contains unencoded 8-bit chars

Modified: incubator/spamassassin/trunk/MANIFEST
==============================================================================
--- incubator/spamassassin/trunk/MANIFEST	(original)
+++ incubator/spamassassin/trunk/MANIFEST	Wed Feb 18 15:29:28 2004
@@ -300,3 +300,5 @@
 tools/split_corpora
 tools/test_extract
 tools/triplets.pl
+t/reportheader_8bit.t
+t/uri.t

Modified: incubator/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
==============================================================================
--- incubator/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm	(original)
+++ incubator/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm	Wed Feb 18 15:29:28 2004
@@ -656,6 +656,7 @@
   foreach my $header (keys %{$self->{conf}->{headers_spam}} ) {
     my $data = $self->{conf}->{headers_spam}->{$header};
     my $line = $self->_process_header($header,$data) || "";
+    $line = $self->qp_encode_header($line);
     $newmsg .= "X-Spam-$header: $line\n" # add even if empty
   }
 
@@ -784,6 +785,7 @@
 
   while ( my($header, $data) = each %{$self->{conf}->{$addition}} ) {
     my $line = $self->_process_header($header,$data) || "";
+    $line = $self->qp_encode_header($line);
     push(@pristine_headers, "X-Spam-$header: $line\n");
   }
 
@@ -791,8 +793,31 @@
   return join('', $mbox, @pristine_headers, "\n", $self->{msg}->get_pristine_body());
 }
 
-sub _process_header {
+sub qp_encode_header {
+  my ($self, $text) = @_;
+
+  # do nothing unless there's an 8-bit char
+  return $text unless ($text =~ /[\x80-\xff]/);
+
+  my $cs = 'ISO-8859-1';
+  if ($self->{report_charset}) {
+    $cs = $self->{report_charset};
+  }
+
+  my @hexchars = split('', '0123456789abcdef');
+  my $ord;
+  $text =~ s{([\x80-\xff])}{
+		$ord = ord $1;
+		'='.$hexchars[($ord & 0xf0) >> 4].$hexchars[$ord & 0x0f]
+	}ges;
 
+  $text = '=?'.$cs.'?Q?'.$text.'?=';
+
+  dbg ("encoding header in $cs: $text");
+  return $text;
+}
+
+sub _process_header {
   my ($self, $hdr_name, $hdr_data) = @_;
 
   $hdr_data = $self->_replace_tags($hdr_data);

Modified: incubator/spamassassin/trunk/t/reportheader.t
==============================================================================
--- incubator/spamassassin/trunk/t/reportheader.t	(original)
+++ incubator/spamassassin/trunk/t/reportheader.t	Wed Feb 18 15:29:28 2004
@@ -27,7 +27,7 @@
 
 tstprefs ("
         $default_cf_lines
-        use_terse_report 0
+        report_safe 0
 	");
 
 sarun ("-L -t < data/spam/001", \&patterns_run_cb);

Added: incubator/spamassassin/trunk/t/reportheader_8bit.t
==============================================================================
--- (empty file)
+++ incubator/spamassassin/trunk/t/reportheader_8bit.t	Wed Feb 18 15:29:28 2004
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("reportheader");
+use Test; BEGIN { plan tests => 2 };
+
+$ENV{'LC_ALL'} = 'C';             # a cheat, but we need the patterns to work
+
+# ---------------------------------------------------------------------------
+
+%patterns = (
+
+    q{X-Spam-Report: =?ISO-8859-1?Q? }, 'qp-encoded-hdr',
+    q{ Invalid Date: header =ae =af =b0 foo }, 'qp-encoded-desc',
+
+);
+
+tstprefs ("
+        $default_cf_lines
+        report_safe 0
+	describe INVALID_DATE	Invalid Date: header \xae \xaf \xb0 foo
+	");
+
+sarun ("-L -t < data/spam/001", \&patterns_run_cb);
+ok_all_patterns();
+