Ignore Content-Id for Cnt-Disp: attachment
authorAndre Heinecke <aheinecke@intevation.de>
Fri, 28 Sep 2018 11:45:08 +0000 (13:45 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Fri, 28 Sep 2018 11:45:08 +0000 (13:45 +0200)
* src/mimedataprovider.cpp (t2body): Ignore content-id.

--
This should hopefully cover all cases where attachments
were hidden although they should have been shown. Outlook
itself seems to make the difference based on Content-Disposition.

According to documentation there are also ATTACH_FLAGS set
in case an attachment is hidden due to MHTML embeds. But
modifying those did not have an effect.

GnuPG-Bug-Id: T4161

src/mimedataprovider.cpp

index ad09c62..01841da 100644 (file)
@@ -189,6 +189,7 @@ t2body (MimeDataProvider *provider, rfc822parse_t msg)
   char *filename = NULL;
   char *cid = NULL;
   char *charset = NULL;
+  bool ignore_cid = false;
 
   /* Figure out the encoding.  */
   ctx->is_qp_encoded = 0;
@@ -215,6 +216,14 @@ t2body (MimeDataProvider *provider, rfc822parse_t msg)
         filename = rfc2047_parse (s);
       s = rfc822parse_query_parameter (field, NULL, 1);
 
+      if (s && strstr (s, "attachment"))
+        {
+          log_debug ("%s:%s: Found Content-Disposition attachment."
+                     " Ignoring content-id to avoid hiding.",
+                     SRCNAME, __func__);
+          ignore_cid = true;
+        }
+
       /* This is a bit of a taste matter how to treat inline
          attachments. Outlook does not show them inline so we
          should not put it in the body either as we have
@@ -269,13 +278,15 @@ t2body (MimeDataProvider *provider, rfc822parse_t msg)
     }
 
   /* Parse a Content Id header */
-  p = rfc822parse_get_field (msg, "Content-Id", -1, &off);
-  if (p)
+  if (!ignore_cid)
     {
-       cid = xstrdup (p+off);
-       xfree (p);
+      p = rfc822parse_get_field (msg, "Content-Id", -1, &off);
+      if (p)
+        {
+           cid = xstrdup (p+off);
+           xfree (p);
+        }
     }
-
   /* Update our idea of the entire MIME structure.  */
   {
     mimestruct_item_t ms;