[evolution-data-server/email-factory] Add MIME Filter to convert few corrupt mails to UTF8. It crashes other wise.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/email-factory] Add MIME Filter to convert few corrupt mails to UTF8. It crashes other wise.
- Date: Tue, 17 May 2011 17:35:06 +0000 (UTC)
commit 47c1f0fb314f6ea8bf8ef6bcad979e066c3b0b13
Author: Srinivasa Ragavan <sragavan gnome org>
Date: Tue May 17 22:56:21 2011 +0530
Add MIME Filter to convert few corrupt mails to UTF8. It crashes other wise.
mail/daemon/e-mail-data-folder.c | 24 ++++++++++++++++++++----
1 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/mail/daemon/e-mail-data-folder.c b/mail/daemon/e-mail-data-folder.c
index a907fba..ddcbfef 100644
--- a/mail/daemon/e-mail-data-folder.c
+++ b/mail/daemon/e-mail-data-folder.c
@@ -1,6 +1,7 @@
/* e-mail-data-folder.c */
#include <glib/gi18n.h>
+#include <gconf/gconf-client.h>
#include "e-mail-local.h"
#include "e-mail-data-folder.h"
#include "e-mail-data-session.h"
@@ -1020,6 +1021,10 @@ app_getmsg_operate (CamelFolder *folder, gpointer sdata, GError **error)
CamelMimeMessage *msg;
CamelStream *stream;
GByteArray *array;
+ CamelStream *filter_stream = NULL;
+ CamelMimeFilter *charenc = NULL;
+ static char *charset = NULL;
+ GConfClient *gconf;
msg = camel_folder_get_message (folder, data->uid, error);
@@ -1027,12 +1032,24 @@ app_getmsg_operate (CamelFolder *folder, gpointer sdata, GError **error)
return FALSE;
stream = camel_stream_mem_new ();
+ filter_stream = camel_stream_filter_new (stream);
- camel_data_wrapper_decode_to_stream ((CamelDataWrapper *)msg, stream, NULL);
+ if (!charset) {
+ gconf = gconf_client_get_default ();
+ charset = gconf_client_get_string (gconf, "/apps/evolution/mail/display/charset",NULL);
+ g_object_unref (gconf);
+ }
+
+ charenc = camel_mime_filter_charset_new (charset, "UTF-8");
+ camel_stream_filter_add (CAMEL_STREAM_FILTER (filter_stream), charenc);
+ g_object_unref (charenc);
+ g_object_unref (stream);
+
+ camel_data_wrapper_decode_to_stream ((CamelDataWrapper *)msg, filter_stream, NULL);
array = camel_stream_mem_get_byte_array ((CamelStreamMem *)stream);
data->msg_buf = g_strndup ((gchar *) array->data, array->len);
- g_object_unref (stream);
+ g_object_unref (filter_stream);
g_object_unref (msg);
return TRUE;
@@ -1573,7 +1590,7 @@ impl_Mail_transferMessagesTo (EGdbusFolderCF *object, GDBusMethodInvocation *inv
static gboolean
ps_operate (CamelFolder *folder, gpointer sdata, GError **error)
{
- EMailFolderTransferData *data = (EMailFolderTransferData *)sdata;
+ //EMailFolderTransferData *data = (EMailFolderTransferData *)sdata;
camel_folder_summary_set_need_preview (folder->summary, TRUE);
camel_folder_summary_prepare_fetch_all (folder->summary, error);
@@ -1606,7 +1623,6 @@ impl_Mail_prepareSummary (EGdbusFolderCF *object, GDBusMethodInvocation *invocat
{
EMailDataFolderPrivate *priv = DATA_FOLDER_PRIVATE(mfolder);
EMailFolderTransferData *data = g_new0 (EMailFolderTransferData, 1);
- int i;
data->object = object;
data->invocation = invocation;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]