[evolution] Replace e_mail_part_snoop_type() with e_mail_part_guess_mime_type()



commit 9da6b53a12942dbce9c3763bb88c9dbfbc294ef4
Author: Milan Crha <mcrha redhat com>
Date:   Mon Oct 10 18:44:10 2022 +0200

    Replace e_mail_part_snoop_type() with e_mail_part_guess_mime_type()
    
    The former function returned a `const gchar *`, pretending the string
    is a static string, while it left the string in its own global memory,
    effectively leaking it at the application end. Rather than this, return
    non-const 'gchar *' and free the returned text appropriately.

 src/em-format/e-mail-formatter-attachment.c        | 12 ++++-----
 src/em-format/e-mail-inline-filter.c               | 22 +++++++++------
 src/em-format/e-mail-parser-application-smime.c    | 10 ++++---
 src/em-format/e-mail-parser-inlinepgp-encrypted.c  | 13 ++++-----
 src/em-format/e-mail-parser-multipart-mixed.c      | 31 +++++++++++-----------
 src/em-format/e-mail-parser-text-plain.c           | 12 +++++----
 src/em-format/e-mail-parser.c                      | 26 ++++++++----------
 src/em-format/e-mail-part-attachment.c             | 24 +++++++++++++++++
 src/em-format/e-mail-part-attachment.h             |  6 ++++-
 src/em-format/e-mail-part-utils.c                  | 31 +++++-----------------
 src/em-format/e-mail-part-utils.h                  |  2 +-
 src/em-format/e-mail-part.c                        |  3 ++-
 .../e-mail-parser-tnef-attachment.c                | 10 ++++---
 13 files changed, 111 insertions(+), 91 deletions(-)
---
diff --git a/src/em-format/e-mail-formatter-attachment.c b/src/em-format/e-mail-formatter-attachment.c
index 43e5a09651..311f8bd5a0 100644
--- a/src/em-format/e-mail-formatter-attachment.c
+++ b/src/em-format/e-mail-formatter-attachment.c
@@ -113,10 +113,10 @@ emfe_attachment_format (EMailFormatterExtension *extension,
        registry = e_mail_formatter_get_extension_registry (formatter);
 
        extensions = e_mail_extension_registry_get_for_mime_type (
-               registry, empa->snoop_mime_type);
+               registry, e_mail_part_attachment_get_guessed_mime_type (empa));
        if (extensions == NULL)
                extensions = e_mail_extension_registry_get_fallback (
-                       registry, empa->snoop_mime_type);
+                       registry, e_mail_part_attachment_get_guessed_mime_type (empa));
 
        /* If the attachment is requested as RAW, then call the
         * handler directly and do not append any other code. */
@@ -190,7 +190,7 @@ emfe_attachment_format (EMailFormatterExtension *extension,
        /* E_MAIL_FORMATTER_MODE_NORMAL: */
 
        mime_part = e_mail_part_ref_mime_part (part);
-       text = e_mail_part_describe (mime_part, empa->snoop_mime_type);
+       text = e_mail_part_describe (mime_part, e_mail_part_attachment_get_guessed_mime_type (empa));
        flags = e_mail_formatter_get_text_format_flags (formatter);
        html = camel_text_to_html (
                text, flags & CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
@@ -200,9 +200,9 @@ emfe_attachment_format (EMailFormatterExtension *extension,
 
        if (camel_content_type_is (content_type, "text", "*") ||
            camel_content_type_is (content_type, "application", "xml") ||
-           (empa->snoop_mime_type && (
-            g_ascii_strncasecmp (empa->snoop_mime_type, "text/", 5) == 0 ||
-            g_ascii_strcasecmp (empa->snoop_mime_type, "application/xml") == 0))) {
+           (e_mail_part_attachment_get_guessed_mime_type (empa) && (
+            g_ascii_strncasecmp (e_mail_part_attachment_get_guessed_mime_type (empa), "text/", 5) == 0 ||
+            g_ascii_strcasecmp (e_mail_part_attachment_get_guessed_mime_type (empa), "application/xml") == 
0))) {
                GSettings *settings;
                gsize size_limit;
 
diff --git a/src/em-format/e-mail-inline-filter.c b/src/em-format/e-mail-inline-filter.c
index 07df17a3c8..83d71d836b 100644
--- a/src/em-format/e-mail-inline-filter.c
+++ b/src/em-format/e-mail-inline-filter.c
@@ -98,7 +98,6 @@ inline_filter_add_part (EMailInlineFilter *emif,
        CamelTransferEncoding encoding;
        CamelContentType *content_type;
        CamelDataWrapper *dw;
-       const gchar *mimetype;
        CamelMimePart *part;
        CamelStream *mem;
        gchar *type;
@@ -180,13 +179,20 @@ inline_filter_add_part (EMailInlineFilter *emif,
                camel_mime_part_set_filename (part, emif->filename);
 
        /* pre-snoop the mime type of unknown objects, and poke and hack it into place */
-       if (camel_content_type_is (camel_data_wrapper_get_mime_type_field (dw), "application", "octet-stream")
-           && (mimetype = e_mail_part_snoop_type (part))
-           && strcmp (mimetype, "application/octet-stream") != 0) {
-               camel_data_wrapper_set_mime_type (dw, mimetype);
-               camel_mime_part_set_content_type (part, mimetype);
-               if (emif->filename)
-                       camel_mime_part_set_filename (part, emif->filename);
+       if (camel_content_type_is (camel_data_wrapper_get_mime_type_field (dw), "application", 
"octet-stream")) {
+               gchar *guessed_mime_type;
+
+               guessed_mime_type = e_mail_part_guess_mime_type (part);
+
+               if (guessed_mime_type &&
+                   strcmp (guessed_mime_type, "application/octet-stream") != 0) {
+                       camel_data_wrapper_set_mime_type (dw, guessed_mime_type);
+                       camel_mime_part_set_content_type (part, guessed_mime_type);
+                       if (emif->filename)
+                               camel_mime_part_set_filename (part, emif->filename);
+               }
+
+               g_free (guessed_mime_type);
        }
 
        g_free (emif->filename);
diff --git a/src/em-format/e-mail-parser-application-smime.c b/src/em-format/e-mail-parser-application-smime.c
index 116df4ebe8..9904b0c417 100644
--- a/src/em-format/e-mail-parser-application-smime.c
+++ b/src/em-format/e-mail-parser-application-smime.c
@@ -125,12 +125,14 @@ empe_app_smime_parse (EMailParserExtension *extension,
                ct = camel_data_wrapper_get_mime_type_field (CAMEL_DATA_WRAPPER (opart));
 
                if (!ct || camel_content_type_is (ct, "text", "plain")) {
-                       const gchar *mime_type;
+                       gchar *guessed_mime_type;
 
-                       mime_type = e_mail_part_snoop_type (opart);
+                       guessed_mime_type = e_mail_part_guess_mime_type (opart);
 
-                       if (mime_type && g_ascii_strcasecmp (mime_type, "text/plain") != 0)
-                               camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (opart), mime_type);
+                       if (guessed_mime_type && g_ascii_strcasecmp (guessed_mime_type, "text/plain") != 0)
+                               camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (opart), 
guessed_mime_type);
+
+                       g_free (guessed_mime_type);
                }
 
                e_mail_parser_parse_part (
diff --git a/src/em-format/e-mail-parser-inlinepgp-encrypted.c 
b/src/em-format/e-mail-parser-inlinepgp-encrypted.c
index e342825651..caf8607085 100644
--- a/src/em-format/e-mail-parser-inlinepgp-encrypted.c
+++ b/src/em-format/e-mail-parser-inlinepgp-encrypted.c
@@ -94,19 +94,20 @@ empe_inlinepgp_encrypted_parse (EMailParserExtension *extension,
 
        /* this ensures to show the 'opart' as inlined, if possible */
        if (mime_type && g_ascii_strcasecmp (mime_type, "application/octet-stream") == 0) {
-               const gchar *snoop;
+               gchar *guessed_mime_type;
 
-               snoop = e_mail_part_snoop_type (opart);
+               guessed_mime_type = e_mail_part_guess_mime_type (opart);
 
-               if (snoop != NULL) {
-                       camel_data_wrapper_set_mime_type (dw, snoop);
+               if (guessed_mime_type) {
+                       camel_data_wrapper_set_mime_type (dw, guessed_mime_type);
 
                        /* Set the MIME type on the 'opart' itself as well.
                         * If it's "text/plain", then we want the TextPlain
                         * parser extension to treat it as "text/plain" and
                         * NOT wrap it as an attachment. */
-                       camel_data_wrapper_set_mime_type (
-                               CAMEL_DATA_WRAPPER (opart), snoop);
+                       camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (opart), guessed_mime_type);
+
+                       g_free (guessed_mime_type);
                }
        }
 
diff --git a/src/em-format/e-mail-parser-multipart-mixed.c b/src/em-format/e-mail-parser-multipart-mixed.c
index 1912b1bd4e..53c16d1511 100644
--- a/src/em-format/e-mail-parser-multipart-mixed.c
+++ b/src/em-format/e-mail-parser-multipart-mixed.c
@@ -205,16 +205,16 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
                        ct = camel_content_type_ref (ct);
 
                if (!e_mail_parser_get_parsers_for_part (parser, subpart)) {
-                       const gchar *snoop_type;
-                       CamelContentType *snoop_ct = NULL;
+                       gchar *guessed_mime_type;
+                       CamelContentType *guessed_ct = NULL;
 
-                       snoop_type = e_mail_part_snoop_type (subpart);
-                       if (snoop_type)
-                               snoop_ct = camel_content_type_decode (snoop_type);
+                       guessed_mime_type = e_mail_part_guess_mime_type (subpart);
+                       if (guessed_mime_type)
+                               guessed_ct = camel_content_type_decode (guessed_mime_type);
 
-                       if (snoop_ct && snoop_ct->type && snoop_ct->subtype && (
-                           !ct || g_ascii_strcasecmp (snoop_ct->type, ct->type) != 0 ||
-                           g_ascii_strcasecmp (snoop_ct->subtype, ct->subtype) != 0)) {
+                       if (guessed_ct && guessed_ct->type && guessed_ct->subtype && (
+                           !ct || g_ascii_strcasecmp (guessed_ct->type, ct->type) != 0 ||
+                           g_ascii_strcasecmp (guessed_ct->subtype, ct->subtype) != 0)) {
                                CamelStream *mem_stream;
 
                                mem_stream = camel_stream_mem_new ();
@@ -229,7 +229,7 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
                                        opart = camel_mime_part_new ();
 
                                        dw = camel_data_wrapper_new ();
-                                       camel_data_wrapper_set_mime_type (dw, snoop_type);
+                                       camel_data_wrapper_set_mime_type (dw, guessed_mime_type);
                                        if (camel_data_wrapper_construct_from_stream_sync (dw, mem_stream, 
cancellable, NULL)) {
                                                const gchar *disposition;
 
@@ -244,17 +244,17 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
                                                if (ct && ct->params) {
                                                        CamelHeaderParam *param;
                                                        for (param = ct->params; param; param = param->next) {
-                                                               camel_content_type_set_param (snoop_ct, 
param->name, param->value);
+                                                               camel_content_type_set_param (guessed_ct, 
param->name, param->value);
                                                        }
                                                }
 
-                                               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);
+                                               camel_content_type_set_param (guessed_ct, 
E_MAIL_PART_X_EVOLUTION_GUESSED, "1");
+                                               camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER 
(opart), guessed_ct);
 
                                                handled = e_mail_parser_parse_part (parser, opart, part_id, 
cancellable, &work_queue);
                                                if (handled) {
                                                        camel_content_type_unref (ct);
-                                                       ct = camel_content_type_ref (snoop_ct);
+                                                       ct = camel_content_type_ref (guessed_ct);
                                                }
                                        }
 
@@ -265,8 +265,9 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
                                g_object_unref (mem_stream);
                        }
 
-                       if (snoop_ct)
-                               camel_content_type_unref (snoop_ct);
+                       if (guessed_ct)
+                               camel_content_type_unref (guessed_ct);
+                       g_free (guessed_mime_type);
                }
 
                if (!handled) {
diff --git a/src/em-format/e-mail-parser-text-plain.c b/src/em-format/e-mail-parser-text-plain.c
index 3d936627a5..4695eae607 100644
--- a/src/em-format/e-mail-parser-text-plain.c
+++ b/src/em-format/e-mail-parser-text-plain.c
@@ -113,7 +113,7 @@ empe_text_plain_parse (EMailParserExtension *extension,
        gint ii, count;
        EMailInlineFilter *inline_filter;
        gboolean charset_added = FALSE;
-       const gchar *snoop_type = NULL;
+       gchar *guessed_mime_type = NULL;
        gboolean is_attachment;
        gboolean handled = FALSE;
 
@@ -127,16 +127,18 @@ empe_text_plain_parse (EMailParserExtension *extension,
        /* FIXME: We should discard this multipart if it only contains
         * the original text, but it makes this hash lookup more complex */
        if (!camel_data_wrapper_get_mime_type_field (dw))
-               snoop_type = e_mail_part_snoop_type (part);
+               guessed_mime_type = e_mail_part_guess_mime_type (part);
 
-       /* if we had to snoop the part type to get here, then
+       /* if we had to guess the part type to get here, then
         * use that as the base type, yuck */
-       if (snoop_type == NULL
-               || (type = camel_content_type_decode (snoop_type)) == NULL) {
+       if (guessed_mime_type == NULL ||
+           (type = camel_content_type_decode (guessed_mime_type)) == NULL) {
                type = camel_data_wrapper_get_mime_type_field (dw);
                camel_content_type_ref (type);
        }
 
+       g_clear_pointer (&guessed_mime_type, g_free);
+
        if (camel_data_wrapper_get_mime_type_field (dw) && type != camel_data_wrapper_get_mime_type_field 
(dw) &&
            camel_content_type_param (camel_data_wrapper_get_mime_type_field (dw), "charset")) {
                camel_content_type_set_param (type, "charset", camel_content_type_param 
(camel_data_wrapper_get_mime_type_field (dw), "charset"));
diff --git a/src/em-format/e-mail-parser.c b/src/em-format/e-mail-parser.c
index ad7c1d56ce..4e601c94ef 100644
--- a/src/em-format/e-mail-parser.c
+++ b/src/em-format/e-mail-parser.c
@@ -791,10 +791,9 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
        EMailPartAttachment *empa;
        EAttachment *attachment;
        EMailPart *first_part;
-       const gchar *snoop_mime_type;
+       gchar *guessed_mime_type = NULL;
        GQueue *extensions;
        CamelContentType *ct;
-       gchar *mime_type;
        CamelDataWrapper *dw;
        GByteArray *ba;
        gsize size;
@@ -802,9 +801,10 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
 
        ct = camel_mime_part_get_content_type (part);
        extensions = NULL;
-       snoop_mime_type = NULL;
        if (ct) {
                EMailExtensionRegistry *reg;
+               gchar *mime_type;
+
                mime_type = camel_content_type_simple (ct);
 
                reg = e_mail_parser_get_extension_registry (parser);
@@ -813,25 +813,22 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
 
                if (camel_content_type_is (ct, "text", "*") ||
                    camel_content_type_is (ct, "message", "*"))
-                       snoop_mime_type = mime_type;
+                       guessed_mime_type = mime_type;
                else
                        g_free (mime_type);
        }
 
-       if (!snoop_mime_type)
-               snoop_mime_type = e_mail_part_snoop_type (part);
+       if (!guessed_mime_type)
+               guessed_mime_type = e_mail_part_guess_mime_type (part);
 
        if (!extensions) {
                EMailExtensionRegistry *reg;
 
                reg = e_mail_parser_get_extension_registry (parser);
-               extensions = e_mail_extension_registry_get_for_mime_type (
-                       reg, snoop_mime_type);
+               extensions = e_mail_extension_registry_get_for_mime_type (reg, guessed_mime_type);
 
-               if (!extensions) {
-                       extensions = e_mail_extension_registry_get_fallback (
-                               reg, snoop_mime_type);
-               }
+               if (!extensions)
+                       extensions = e_mail_extension_registry_get_fallback (reg, guessed_mime_type);
        }
 
        part_id_len = part_id->len;
@@ -840,7 +837,7 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
        empa = e_mail_part_attachment_new (part, part_id->str);
        empa->shown = extensions && (!g_queue_is_empty (extensions) &&
                e_mail_part_is_inline (part, extensions));
-       empa->snoop_mime_type = snoop_mime_type;
+       e_mail_part_attachment_take_guessed_mime_type (empa, guessed_mime_type);
 
        first_part = g_queue_peek_head (parts_queue);
        if (first_part != NULL && !E_IS_MAIL_PART_ATTACHMENT (first_part)) {
@@ -883,8 +880,7 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
 
                if (file_info == NULL) {
                        file_info = g_file_info_new ();
-                       g_file_info_set_content_type (
-                               file_info, empa->snoop_mime_type);
+                       g_file_info_set_content_type (file_info, e_mail_part_attachment_get_guessed_mime_type 
(empa));
                }
 
                g_file_info_set_size (file_info, size);
diff --git a/src/em-format/e-mail-part-attachment.c b/src/em-format/e-mail-part-attachment.c
index 3490c3d7e5..f9f2c97615 100644
--- a/src/em-format/e-mail-part-attachment.c
+++ b/src/em-format/e-mail-part-attachment.c
@@ -23,6 +23,7 @@
 
 struct _EMailPartAttachmentPrivate {
        EAttachment *attachment;
+       gchar *guessed_mime_type;
        gboolean expandable;
 };
 
@@ -99,6 +100,7 @@ mail_part_attachment_finalize (GObject *object)
        EMailPartAttachment *part = E_MAIL_PART_ATTACHMENT (object);
 
        g_free (part->part_id_with_attachment);
+       g_free (part->priv->guessed_mime_type);
 
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (e_mail_part_attachment_parent_class)->
@@ -226,3 +228,25 @@ e_mail_part_attachment_get_expandable (EMailPartAttachment *part)
 
        return part->priv->expandable;
 }
+
+void
+e_mail_part_attachment_take_guessed_mime_type (EMailPartAttachment *part,
+                                              gchar *guessed_mime_type)
+{
+       g_return_if_fail (E_IS_MAIL_PART_ATTACHMENT (part));
+
+       if (g_strcmp0 (guessed_mime_type, part->priv->guessed_mime_type) != 0) {
+               g_free (part->priv->guessed_mime_type);
+               part->priv->guessed_mime_type = guessed_mime_type;
+       } else if (guessed_mime_type != part->priv->guessed_mime_type) {
+               g_free (guessed_mime_type);
+       }
+}
+
+const gchar *
+e_mail_part_attachment_get_guessed_mime_type (EMailPartAttachment *part)
+{
+       g_return_val_if_fail (E_IS_MAIL_PART_ATTACHMENT (part), NULL);
+
+       return part->priv->guessed_mime_type;
+}
diff --git a/src/em-format/e-mail-part-attachment.h b/src/em-format/e-mail-part-attachment.h
index 818ab30d4f..d94dca41c9 100644
--- a/src/em-format/e-mail-part-attachment.h
+++ b/src/em-format/e-mail-part-attachment.h
@@ -55,7 +55,6 @@ struct _EMailPartAttachment {
        gchar *part_id_with_attachment;
 
        gboolean shown;
-       const gchar *snoop_mime_type;
 };
 
 struct _EMailPartAttachmentClass {
@@ -73,6 +72,11 @@ void         e_mail_part_attachment_set_expandable
                                                 gboolean expandable);
 gboolean       e_mail_part_attachment_get_expandable
                                                (EMailPartAttachment *part);
+void           e_mail_part_attachment_take_guessed_mime_type
+                                               (EMailPartAttachment *part,
+                                                gchar *guessed_mime_type);
+const gchar *  e_mail_part_attachment_get_guessed_mime_type
+                                               (EMailPartAttachment *part);
 
 G_END_DECLS
 
diff --git a/src/em-format/e-mail-part-utils.c b/src/em-format/e-mail-part-utils.c
index c6aa91ac5c..0259f60067 100644
--- a/src/em-format/e-mail-part-utils.c
+++ b/src/em-format/e-mail-part-utils.c
@@ -173,21 +173,18 @@ e_mail_part_get_frame_security_style (EMailPart *part)
 }
 
 /**
- * e_mail_part_snoop_type:
+ * e_mail_part_guess_mime_type:
  * @part: a #CamelMimePart
  *
- * Tries to snoop the mime type of a part.
+ * Tries to guess the mime type of a part.
  *
- * Return value: %NULL if unknown (more likely application/octet-stream).
+ * Returns: (transfer full): %NULL if unknown (more likely application/octet-stream).
  **/
-const gchar *
-e_mail_part_snoop_type (CamelMimePart *part)
+gchar *
+e_mail_part_guess_mime_type (CamelMimePart *part)
 {
-       /* cache is here only to be able still return const gchar * */
-       static GHashTable *types_cache = NULL;
-
        const gchar *filename;
-       gchar *name_type = NULL, *magic_type = NULL, *res, *tmp;
+       gchar *name_type = NULL, *magic_type = NULL, *res;
        CamelDataWrapper *dw;
 
        filename = camel_mime_part_get_filename (part);
@@ -241,22 +238,6 @@ e_mail_part_snoop_type (CamelMimePart *part)
        if (res != magic_type)
                g_free (magic_type);
 
-       if (!types_cache)
-               types_cache = g_hash_table_new_full (
-                       g_str_hash, g_str_equal,
-                       (GDestroyNotify) g_free,
-                       (GDestroyNotify) NULL);
-
-       if (res) {
-               tmp = g_hash_table_lookup (types_cache, res);
-               if (tmp) {
-                       g_free (res);
-                       res = tmp;
-               } else {
-                       g_hash_table_insert (types_cache, res, res);
-               }
-       }
-
        d (printf ("Snooped mime type %s\n", res));
        return res;
 
diff --git a/src/em-format/e-mail-part-utils.h b/src/em-format/e-mail-part-utils.h
index 74f057dd55..43403f5fb5 100644
--- a/src/em-format/e-mail-part-utils.h
+++ b/src/em-format/e-mail-part-utils.h
@@ -31,7 +31,7 @@ gboolean      e_mail_part_is_secured          (CamelMimePart *part);
 const gchar *  e_mail_part_get_frame_security_style
                                                (EMailPart *part);
 
-const gchar *  e_mail_part_snoop_type          (CamelMimePart *part);
+gchar *                e_mail_part_guess_mime_type     (CamelMimePart *part);
 
 gboolean       e_mail_part_is_attachment       (CamelMimePart *part);
 
diff --git a/src/em-format/e-mail-part.c b/src/em-format/e-mail-part.c
index 53499f2488..32e7f7f71b 100644
--- a/src/em-format/e-mail-part.c
+++ b/src/em-format/e-mail-part.c
@@ -540,8 +540,9 @@ e_mail_part_should_show_inline (EMailPart *part)
 
        if (E_IS_MAIL_PART_ATTACHMENT (part)) {
                EMailPartAttachment *empa = E_MAIL_PART_ATTACHMENT (part);
+               const gchar *guessed_mime_type = e_mail_part_attachment_get_guessed_mime_type (empa);
 
-               if (g_strcmp0 (empa->snoop_mime_type, "message/rfc822") == 0)
+               if (guessed_mime_type && g_ascii_strcasecmp (guessed_mime_type, "message/rfc822") == 0)
                        return TRUE;
        }
 
diff --git a/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c 
b/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
index d6e07532f9..aa8a557b68 100644
--- a/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
+++ b/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
@@ -185,7 +185,7 @@ empe_tnef_attachment_parse (EMailParserExtension *extension,
                CamelDataWrapper *content;
                CamelStream *stream;
                gchar *path;
-               const gchar *type;
+               gchar *guessed_mime_type;
 
                if (!strcmp (d->d_name, ".")
                    || !strcmp (d->d_name, "..")
@@ -206,9 +206,11 @@ empe_tnef_attachment_parse (EMailParserExtension *extension,
                camel_medium_set_content ((CamelMedium *) part, content);
                g_object_unref (content);
 
-               type = e_mail_part_snoop_type (part);
-               if (type)
-                   camel_data_wrapper_set_mime_type ((CamelDataWrapper *) part, type);
+               guessed_mime_type = e_mail_part_guess_mime_type (part);
+               if (guessed_mime_type) {
+                       camel_data_wrapper_set_mime_type ((CamelDataWrapper *) part, guessed_mime_type);
+                       g_free (guessed_mime_type);
+               }
 
                camel_mime_part_set_filename (part, d->d_name);
 


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