[evolution/gnome-3-32] I#519 - Hides .p7m attachments



commit c7abd1d5227e76d550563183bf304e7c4c08af8b
Author: Milan Crha <mcrha redhat com>
Date:   Thu Jul 4 10:58:51 2019 +0200

    I#519 - Hides .p7m attachments
    
    Closes https://gitlab.gnome.org/GNOME/evolution/issues/519

 src/em-format/e-mail-parser-application-smime.c   | 34 +++++++++++++--------
 src/em-format/e-mail-parser-multipart-encrypted.c |  9 ++++++
 src/em-format/e-mail-parser-multipart-mixed.c     |  1 +
 src/em-format/e-mail-parser-multipart-signed.c    | 37 ++++++++++++++---------
 src/em-format/e-mail-part-utils.h                 |  3 ++
 5 files changed, 58 insertions(+), 26 deletions(-)
---
diff --git a/src/em-format/e-mail-parser-application-smime.c b/src/em-format/e-mail-parser-application-smime.c
index 47f8be798c..1caca3b574 100644
--- a/src/em-format/e-mail-parser-application-smime.c
+++ b/src/em-format/e-mail-parser-application-smime.c
@@ -58,26 +58,36 @@ empe_app_smime_parse (EMailParserExtension *extension,
        CamelMimePart *opart;
        CamelCipherValidity *valid;
        CamelContentType *ct;
+       gboolean is_guessed;
        GError *local_error = NULL;
 
        ct = camel_mime_part_get_content_type (part);
-       if (camel_content_type_is (ct, "application", "pkcs7-signature") ||
+
+       /* When it's a guessed type, then rather not interpret it as a signed/encrypted message */
+       is_guessed = g_strcmp0 (camel_content_type_param (ct, E_MAIL_PART_X_EVOLUTION_GUESSED), "1") == 0;
+
+       if (is_guessed ||
+           camel_content_type_is (ct, "application", "pkcs7-signature") ||
+           camel_content_type_is (ct, "application", "xpkcs7signature") ||
            camel_content_type_is (ct, "application", "xpkcs7-signature") ||
            camel_content_type_is (ct, "application", "x-pkcs7-signature")) {
-               EMailPartList *part_list;
-               gboolean add_as_attachment = FALSE;
+               gboolean add_as_attachment = is_guessed;
 
-               part_list = e_mail_parser_ref_part_list_for_operation (parser, cancellable);
-               if (part_list) {
-                       CamelMimePart *parent_part;
+               if (!add_as_attachment) {
+                       EMailPartList *part_list;
 
-                       parent_part = e_mail_part_utils_find_parent_part (e_mail_part_list_get_message 
(part_list), part);
-                       if (parent_part) {
-                               ct = camel_mime_part_get_content_type (parent_part);
-                               add_as_attachment = !camel_content_type_is (ct, "multipart", "signed");
-                       }
+                       part_list = e_mail_parser_ref_part_list_for_operation (parser, cancellable);
+                       if (part_list) {
+                               CamelMimePart *parent_part;
 
-                       g_object_unref (part_list);
+                               parent_part = e_mail_part_utils_find_parent_part 
(e_mail_part_list_get_message (part_list), part);
+                               if (parent_part) {
+                                       ct = camel_mime_part_get_content_type (parent_part);
+                                       add_as_attachment = !camel_content_type_is (ct, "multipart", 
"signed");
+                               }
+
+                               g_object_unref (part_list);
+                       }
                }
 
                if (add_as_attachment)
diff --git a/src/em-format/e-mail-parser-multipart-encrypted.c 
b/src/em-format/e-mail-parser-multipart-encrypted.c
index 7faf4ab1ab..498e361a8b 100644
--- a/src/em-format/e-mail-parser-multipart-encrypted.c
+++ b/src/em-format/e-mail-parser-multipart-encrypted.c
@@ -52,12 +52,21 @@ empe_mp_encrypted_parse (EMailParserExtension *extension,
        const gchar *protocol;
        CamelMimePart *opart;
        CamelCipherValidity *valid;
+       CamelContentType *content_type;
        CamelMultipartEncrypted *mpe;
        GQueue work_queue = G_QUEUE_INIT;
        GList *head, *link;
        GError *local_error = NULL;
        gint len;
 
+       content_type = camel_mime_part_get_content_type (part);
+
+       /* When it's a guessed type, then rather not interpret it as an encrypted message */
+       if (g_strcmp0 (camel_content_type_param (content_type, E_MAIL_PART_X_EVOLUTION_GUESSED), "1") == 0) {
+               e_mail_parser_wrap_as_non_expandable_attachment (parser, part, part_id, out_mail_parts);
+               return TRUE;
+       }
+
        mpe = (CamelMultipartEncrypted *) camel_medium_get_content ((CamelMedium *) part);
        if (!CAMEL_IS_MULTIPART_ENCRYPTED (mpe)) {
                e_mail_parser_error (
diff --git a/src/em-format/e-mail-parser-multipart-mixed.c b/src/em-format/e-mail-parser-multipart-mixed.c
index 55d686c454..c469ff0f52 100644
--- a/src/em-format/e-mail-parser-multipart-mixed.c
+++ b/src/em-format/e-mail-parser-multipart-mixed.c
@@ -248,6 +248,7 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
                                                        }
                                                }
 
+                                               camel_content_type_set_param (snoop_ct, 
E_MAIL_PART_X_EVOLUTION_GUESSED, "1");
                                                camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER 
(opart), snoop_ct);
 
                                                handled = e_mail_parser_parse_part (parser, opart, part_id, 
cancellable, &work_queue);
diff --git a/src/em-format/e-mail-parser-multipart-signed.c b/src/em-format/e-mail-parser-multipart-signed.c
index 4629c09f6b..b12587e3fa 100644
--- a/src/em-format/e-mail-parser-multipart-signed.c
+++ b/src/em-format/e-mail-parser-multipart-signed.c
@@ -63,22 +63,31 @@ empe_mp_signed_parse (EMailParserExtension *extension,
 
        /* If the part is application/pgp-signature sub-part then skip it. */
        if (!CAMEL_IS_MULTIPART (part)) {
+               gboolean is_guessed;
+
                content_type = camel_mime_part_get_content_type (part);
-               if (camel_content_type_is (content_type, "application", "pgp-signature")) {
-                       EMailPartList *part_list;
-                       gboolean add_as_attachment = FALSE;
-
-                       part_list = e_mail_parser_ref_part_list_for_operation (parser, cancellable);
-                       if (part_list) {
-                               CamelMimePart *parent_part;
-
-                               parent_part = e_mail_part_utils_find_parent_part 
(e_mail_part_list_get_message (part_list), part);
-                               if (parent_part) {
-                                       content_type = camel_mime_part_get_content_type (parent_part);
-                                       add_as_attachment = !camel_content_type_is (content_type, 
"multipart", "signed");
-                               }
 
-                               g_object_unref (part_list);
+               /* When it's a guessed type, then rather not interpret it as a signed message */
+               is_guessed = g_strcmp0 (camel_content_type_param (content_type, 
E_MAIL_PART_X_EVOLUTION_GUESSED), "1") == 0;
+
+               if (is_guessed || camel_content_type_is (content_type, "application", "pgp-signature")) {
+                       gboolean add_as_attachment = is_guessed;
+
+                       if (!add_as_attachment) {
+                               EMailPartList *part_list;
+
+                               part_list = e_mail_parser_ref_part_list_for_operation (parser, cancellable);
+                               if (part_list) {
+                                       CamelMimePart *parent_part;
+
+                                       parent_part = e_mail_part_utils_find_parent_part 
(e_mail_part_list_get_message (part_list), part);
+                                       if (parent_part) {
+                                               content_type = camel_mime_part_get_content_type (parent_part);
+                                               add_as_attachment = !camel_content_type_is (content_type, 
"multipart", "signed");
+                                       }
+
+                                       g_object_unref (part_list);
+                               }
                        }
 
                        if (add_as_attachment)
diff --git a/src/em-format/e-mail-part-utils.h b/src/em-format/e-mail-part-utils.h
index ed2d543db3..74f057dd55 100644
--- a/src/em-format/e-mail-part-utils.h
+++ b/src/em-format/e-mail-part-utils.h
@@ -23,6 +23,9 @@
 
 G_BEGIN_DECLS
 
+/* Header/parameter name for guessed MIME types; it's set to "1" when it's guessed. */
+#define E_MAIL_PART_X_EVOLUTION_GUESSED "X-Evolution-Guessed"
+
 gboolean       e_mail_part_is_secured          (CamelMimePart *part);
 
 const gchar *  e_mail_part_get_frame_security_style


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]