[evolution-mapi] Bug #607422 - Crash while importing a message without From header
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-mapi] Bug #607422 - Crash while importing a message without From header
- Date: Tue, 16 Feb 2010 12:18:58 +0000 (UTC)
commit 1f554b338445931b602875fc44b75e1e072633af
Author: Milan Crha <mcrha redhat com>
Date: Tue Feb 16 13:17:26 2010 +0100
Bug #607422 - Crash while importing a message without From header
src/camel/camel-mapi-folder.c | 5 ++---
src/camel/camel-mapi-transport.c | 2 +-
src/camel/camel-mapi-utils.c | 34 +++++++++++++++++++---------------
src/camel/camel-mapi-utils.h | 3 +--
4 files changed, 23 insertions(+), 21 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index 31823ca..8b21a92 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -2158,7 +2158,7 @@ mapi_append_message (CamelFolder *folder, CamelMimeMessage *message,
{
CamelMapiStore *mapi_store= CAMEL_MAPI_STORE(folder->parent_store);
CamelOfflineStore *offline = (CamelOfflineStore *) folder->parent_store;
- CamelAddress *from = NULL, *recipients = NULL;
+ CamelAddress *from = NULL;
CamelStoreInfo *si;
MapiItem *item = NULL;
@@ -2194,9 +2194,8 @@ mapi_append_message (CamelFolder *folder, CamelMimeMessage *message,
/* Convert MIME to Item */
from = (CamelAddress *) camel_mime_message_get_from (message);
- recipients = (CamelAddress *) camel_mime_message_get_recipients (message, "to");
- item = camel_mapi_utils_mime_to_item (message, from, recipients, ex);
+ item = camel_mapi_utils_mime_to_item (message, from, ex);
mid = exchange_mapi_create_item (-1, fid, NULL, NULL,
camel_mapi_utils_create_item_build_props, item,
diff --git a/src/camel/camel-mapi-transport.c b/src/camel/camel-mapi-transport.c
index 323dd8b..83330e3 100644
--- a/src/camel/camel-mapi-transport.c
+++ b/src/camel/camel-mapi-transport.c
@@ -106,7 +106,7 @@ mapi_send_to (CamelTransport *transport, CamelMimeMessage *message,
}
/* Convert MIME to MAPIItem, attacment lists and recipient list.*/
- item = camel_mapi_utils_mime_to_item (message, from, recipients, ex);
+ item = camel_mapi_utils_mime_to_item (message, from, ex);
/* send */
st = mapi_message_item_send(item);
diff --git a/src/camel/camel-mapi-utils.c b/src/camel/camel-mapi-utils.c
index ce088f1..4209aba 100644
--- a/src/camel/camel-mapi-utils.c
+++ b/src/camel/camel-mapi-utils.c
@@ -114,19 +114,19 @@ mapi_item_add_recipient (const char *recipients, OlMailRecipientType type, GSLis
static void
mapi_item_set_from(MapiItem *item, const char *from)
{
- if (item->header.from) {
- free(item->header.from);
- }
- item->header.from = strdup(from);
+ if (item->header.from)
+ g_free (item->header.from);
+
+ item->header.from = g_strdup (from);
}
static void
mapi_item_set_subject(MapiItem *item, const char *subject)
{
if (item->header.subject)
- free(item->header.subject);
+ g_free (item->header.subject);
- item->header.subject = g_strdup(subject);
+ item->header.subject = g_strdup (subject);
}
#define MAX_READ_SIZE 0x1000
@@ -320,8 +320,7 @@ mapi_do_multipart (CamelMultipart *mp, MapiItem *item, gboolean *is_first)
MapiItem *
-camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from, CamelAddress *recipients,
- CamelException *ex)
+camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from, CamelException *ex)
{
CamelDataWrapper *dw = NULL;
CamelContentType *type;
@@ -339,26 +338,31 @@ camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from, Ca
/* headers */
- if (!camel_internet_address_get((const CamelInternetAddress *)from, 0, &namep, &addressp)) {
- printf("index\n");
- return (FALSE);
+ if (from) {
+ if (!camel_internet_address_get ((const CamelInternetAddress *)from, 0, &namep, &addressp)) {
+ g_warning ("%s: Invalid 'from' passed in", G_STRFUNC);
+ g_free (item);
+ return NULL;
+ }
+ } else {
+ /* though invalid, then possible, to pass in a message without any 'from' */
+ namep = NULL;
}
- /** WARNING: double check **/
mapi_item_set_from (item, namep);
to = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO);
- for (i = 0; camel_internet_address_get(to, i, &namep, &addressp); i++){
+ for (i = 0; to && camel_internet_address_get (to, i, &namep, &addressp); i++){
mapi_item_add_recipient (addressp, olTo, &recipient_list);
}
cc = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_CC);
- for (i = 0; camel_internet_address_get(cc, i, &namep, &addressp); i++) {
+ for (i = 0; cc && camel_internet_address_get (cc, i, &namep, &addressp); i++) {
mapi_item_add_recipient (addressp, olCC, &recipient_list);
}
bcc = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_BCC);
- for (i = 0; camel_internet_address_get(bcc, i, &namep, &addressp); i++) {
+ for (i = 0; bcc && camel_internet_address_get (bcc, i, &namep, &addressp); i++) {
mapi_item_add_recipient (addressp, olBCC, &recipient_list);
}
diff --git a/src/camel/camel-mapi-utils.h b/src/camel/camel-mapi-utils.h
index ca200ad..633851d 100644
--- a/src/camel/camel-mapi-utils.h
+++ b/src/camel/camel-mapi-utils.h
@@ -27,8 +27,7 @@
G_BEGIN_DECLS
MapiItem *
-camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from,
- CamelAddress *recipients, CamelException *ex);
+camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from, CamelException *ex);
gint
camel_mapi_utils_create_item_build_props (struct SPropValue **value,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]