[evolution] I#519 - Hides .p7m attachments
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] I#519 - Hides .p7m attachments
- Date: Thu, 4 Jul 2019 08:56:41 +0000 (UTC)
commit 0c7929d0a264a953cdab4eb7768312b4080d399c
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 | 33 ++++++++++++--------
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, 57 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 ae8f07763e..0052089b86 100644
--- a/src/em-format/e-mail-parser-application-smime.c
+++ b/src/em-format/e-mail-parser-application-smime.c
@@ -60,27 +60,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 c122d3ed28..8f11a2ed42 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]