From: Don Armstrong <don@donarmstrong.com>
Date: Sun, 10 Apr 2022 13:35:19 +0000 (-0700)
Subject: Do not escape From and use .eml when returning a single message
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1aa5061f8033c49525c7a2d424c43900cee19771;p=debbugs.git

Do not escape From and use .eml when returning a single message

 - Address issue with MUAs which don't look at the mime type and instead assume
   mime based on extension, like thunderbird. Closes #1009181
---

diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi
index 9969abbe..87f688e3 100755
--- a/cgi/bugreport.cgi
+++ b/cgi/bugreport.cgi
@@ -250,7 +250,8 @@ my @log;
 if ( $mbox ) {
      binmode(STDOUT,":raw");
      my $date = strftime "%a %b %d %T %Y", localtime;
-     if (@records > 1) {
+     my $multiple_messages = @records > 1;
+     if ($multiple_messages) {
 	 print $q->header(-type => "application/mbox",
 			  -cache_control => 'public, max-age=600',
 			  -etag => $etag,
@@ -262,10 +263,10 @@ if ( $mbox ) {
 	  print $q->header(-type => "message/rfc822",
 			   -cache_control => 'public, max-age=86400',
 			   -etag => $etag,
-			   content_disposition => qq(attachment; filename="bug_${ref}_message_${msg_num}.mbox"),
+			   content_disposition => qq(attachment; filename="bug_${ref}_message_${msg_num}.eml"),
 			  );
      }
-     if ($mbox_status_message and @records > 1) {
+     if ($mbox_status_message and $multiple_messages) {
 	  my $status_message='';
 	  my @status_fields = (retitle   => 'subject',
 			       package   => 'package',
@@ -309,7 +310,7 @@ END
 	  next if not $boring and not $record->{type} eq $wanted_type and not $record_wanted_anyway and @records > 1;
 	  $seen_message_ids{$msg_id} = 1 if defined $msg_id;
           # skip spam messages if we're outputting more than one message
-          next if @records > 1 and $bug->is_spam($msg_id);
+          next if $multiple_messages and $bug->is_spam($msg_id);
       my @lines;
       if ($record->{inner_file}) {
           push @lines, scalar $record->{fh}->getline;
@@ -326,12 +327,13 @@ END
 	       unshift @lines, "From unknown $date";
        }
       print $lines[0]."\n";
-	  print map { s/^(>*From )/>$1/; $_."\n" } @lines[ 1 .. $#lines ];
+	  print map { s/^(>*From )/>$1/ if $multiple_messages;
+                      $_."\n" } @lines[ 1 .. $#lines ];
       if ($record->{inner_file}) {
           my $fh = $record->{fh};
           local $/;
           while (<$fh>) {
-              s/^(>*From )/>$1/gm;
+              s/^(>*From )/>$1/gm if $multiple_messages;
               print $_;
           }
       }
diff --git a/debian/changelog b/debian/changelog
index ef98f3cf..60dfa6c7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,8 @@ debbugs (3.0.0~alpha.1) unstable; urgency=medium
     faster.
   * Add support for a Done: psuedoheader (closes: #950133)
   * Fix unescaped From (closes: #983847)
+  * Actually return message/rfc822 when there is a single message instead
+    of mbox (closes: #1009181)
 
  -- Don Armstrong <don@debian.org>  Fri, 09 Mar 2018 11:17:10 -0800