svn commit: r1936735 - spamassassin/trunk/lib/Mail/SpamAssassin

[email protected] Thu, 30 Jul 2026 14:39:13 -0000
Newsgroups gmane.mail.spam.spamassassin.cvs
Message-ID <178542235376.336670.15290238763176697908@svn03-he-fi>
Author: gbechis
Date: Thu Jul 30 14:39:13 2026
New Revision: 1936735

Log:
when we rewrite the envelope, use headers with the same case as the original email

Modified:
   spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
   spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm	Thu Jul 30 12:45:05 2026	(r1936734)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm	Thu Jul 30 14:39:13 2026	(r1936735)
@@ -496,6 +496,23 @@ sub get_pristine_header {
   }
 }
 
+=item get_pristine_header_name()
+
+Returns the header field name as it actually appears (case-wise) in the
+pristine headers of the message, for a given case-insensitive header name.
+If there are multiple occurrences, the last one is used, consistent with
+get_pristine_header(). If the header isn't found, the passed-in name is
+returned unchanged.
+
+=cut
+
+sub get_pristine_header_name {
+  my ($self, $hdr) = @_;
+
+  my(@names) = $self->{pristine_headers} =~ /^(\Q$hdr\E)[ \t]*:/smgi;
+  return @names ? $names[-1] : $hdr;
+}
+
 =item get_mbox_separator()
 
 Returns the mbox separator found in the message, or undef if there

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm	Thu Jul 30 12:45:05 2026	(r1936734)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm	Thu Jul 30 14:39:13 2026	(r1936735)
@@ -1263,6 +1263,13 @@ sub rewrite_report_safe {
   my $msgid = $self->{msg}->get_pristine_header('Message-Id');
   my $date = $self->{msg}->get_pristine_header("Date");
 
+  my $from_name = $self->{msg}->get_pristine_header_name("From");
+  my $to_name = $self->{msg}->get_pristine_header_name("To");
+  my $cc_name = $self->{msg}->get_pristine_header_name("Cc");
+  my $subject_name = $self->{msg}->get_pristine_header_name("Subject");
+  my $msgid_name = $self->{msg}->get_pristine_header_name('Message-Id');
+  my $date_name = $self->{msg}->get_pristine_header_name("Date");
+
   # It'd be nice to do this with a foreach loop, but with only three
   # possibilities right now, it's easier not to...
 
@@ -1295,12 +1302,12 @@ sub rewrite_report_safe {
   }
 
   # add report headers to message
-  $newmsg .= "From: $from" if defined $from;
-  $newmsg .= "To: $to" if defined $to;
-  $newmsg .= "Cc: $cc" if defined $cc;
-  $newmsg .= "Subject: $subject" if defined $subject;
-  $newmsg .= "Date: $date" if defined $date;
-  $newmsg .= "Message-Id: $msgid" if defined $msgid;
+  $newmsg .= "$from_name: $from" if defined $from;
+  $newmsg .= "$to_name: $to" if defined $to;
+  $newmsg .= "$cc_name: $cc" if defined $cc;
+  $newmsg .= "$subject_name: $subject" if defined $subject;
+  $newmsg .= "$date_name: $date" if defined $date;
+  $newmsg .= "$msgid_name: $msgid" if defined $msgid;
   $newmsg .= $self->_get_added_headers('headers_spam');
 
   if (defined $self->{conf}->{report_safe_copy_headers}) {