]> git.llucax.com Git - software/mutt-debian.git/blobdiff - copy.c
Update and enable NNTP patch
[software/mutt-debian.git] / copy.c
diff --git a/copy.c b/copy.c
index fa28320058e6770524d2a1fe11084856e50d1e6f..62f27277ddc30b8b1f37c058e33b021e506f1001 100644 (file)
--- a/copy.c
+++ b/copy.c
@@ -287,7 +287,7 @@ mutt_copy_hdr (FILE *in, FILE *out, LOFF_T off_start, LOFF_T off_end, int flags,
       if (flags & (CH_DECODE|CH_PREFIX))
       {
        if (mutt_write_one_header (out, 0, headers[x], 
       if (flags & (CH_DECODE|CH_PREFIX))
       {
        if (mutt_write_one_header (out, 0, headers[x], 
-                                  flags & CH_PREFIX ? prefix : 0, mutt_term_width (Wrap)) == -1)
+                                  flags & CH_PREFIX ? prefix : 0, mutt_term_width (Wrap), flags) == -1)
        {
          error = TRUE;
          break;
        {
          error = TRUE;
          break;
@@ -633,12 +633,12 @@ _mutt_copy_message (FILE *fpout, FILE *fpin, HEADER *hdr, BODY *body,
     fseeko (fp, cur->offset, 0);
     if (mutt_copy_bytes (fp, fpout, cur->length) == -1)
     {
     fseeko (fp, cur->offset, 0);
     if (mutt_copy_bytes (fp, fpout, cur->length) == -1)
     {
-      fclose (fp);
+      safe_fclose (&fp);
       mutt_free_body (&cur);
       return (-1);
     }
     mutt_free_body (&cur);
       mutt_free_body (&cur);
       return (-1);
     }
     mutt_free_body (&cur);
-    fclose (fp);
+    safe_fclose (&fp);
   }
   else
   {
   }
   else
   {
@@ -865,9 +865,10 @@ static void format_address_header (char **h, ADDRESS *a)
 static int address_header_decode (char **h)
 {
   char *s = *h;
 static int address_header_decode (char **h)
 {
   char *s = *h;
-  int l;
+  int l, rp = 0;
 
   ADDRESS *a = NULL;
 
   ADDRESS *a = NULL;
+  ADDRESS *cur = NULL;
 
   switch (tolower ((unsigned char) *s))
   {
 
   switch (tolower ((unsigned char) *s))
   {
@@ -876,6 +877,7 @@ static int address_header_decode (char **h)
       if (ascii_strncasecmp (s, "return-path:", 12) == 0)
       {
        l = 12;
       if (ascii_strncasecmp (s, "return-path:", 12) == 0)
       {
        l = 12;
+       rp = 1;
        break;
       }
       else if (ascii_strncasecmp (s, "reply-to:", 9) == 0)
        break;
       }
       else if (ascii_strncasecmp (s, "reply-to:", 9) == 0)
@@ -936,15 +938,23 @@ static int address_header_decode (char **h)
   
   mutt_addrlist_to_local (a);
   rfc2047_decode_adrlist (a);
   
   mutt_addrlist_to_local (a);
   rfc2047_decode_adrlist (a);
-  
-  *h = safe_calloc (1, l + 2);
-  
-  strfcpy (*h, s, l + 1);
-  
-  format_address_header (h, a);
+  for (cur = a; cur; cur = cur->next)
+    if (cur->personal)
+      rfc822_dequote_comment (cur->personal);
+
+  /* angle brackets for return path are mandated by RfC5322,
+   * so leave Return-Path as-is */
+  if (rp)
+    *h = safe_strdup (s);
+  else
+  {
+    *h = safe_calloc (1, l + 2);
+    strfcpy (*h, s, l + 1);
+    format_address_header (h, a);
+  }
 
   rfc822_free_address (&a);
 
   rfc822_free_address (&a);
-  
+
   FREE (&s);
   return 1;
 }
   FREE (&s);
   return 1;
 }