[evolution-mapi] Bug #607422 - Crash while importing a message without From header



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]