[evolution] Bug #468736 - Prevent recursion in em-format



commit 781d9aad4d9083f4ae380901f7b52e8fd82bf2a4
Author: Milan Crha <mcrha redhat com>
Date:   Thu Oct 15 19:27:04 2009 +0200

    Bug #468736 - Prevent recursion in em-format

 em-format/em-format.c |    9 ++++++++-
 mail/em-format-html.c |    8 +++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/em-format/em-format.c b/em-format/em-format.c
index 19423e9..a6b01f4 100644
--- a/em-format/em-format.c
+++ b/em-format/em-format.c
@@ -645,6 +645,7 @@ em_format_part_as(EMFormat *emf, CamelStream *stream, CamelMimePart *part, const
 	g_free(basestr);
 
 	if (mime_type != NULL) {
+		gboolean is_fallback = FALSE;
 		if (g_ascii_strcasecmp(mime_type, "application/octet-stream") == 0) {
 			emf->snoop_mime_type = mime_type = em_format_snoop_type(part);
 			if (mime_type == NULL)
@@ -652,13 +653,19 @@ em_format_part_as(EMFormat *emf, CamelStream *stream, CamelMimePart *part, const
 		}
 
 		handle = em_format_find_handler(emf, mime_type);
-		if (handle == NULL)
+		if (handle == NULL) {
 			handle = em_format_fallback_handler(emf, mime_type);
+			is_fallback = TRUE;
+		}
 
 		if (handle != NULL
 		    && !em_format_is_attachment(emf, part)) {
 			d(printf("running handler for type '%s'\n", mime_type));
+			if (is_fallback)
+				camel_object_meta_set (part, "EMF-Fallback", "1");
 			handle->handler(emf, stream, part, handle);
+			if (is_fallback)
+				camel_object_meta_set (part, "EMF-Fallback",  NULL);
 			goto finish;
 		}
 		d(printf("this type is an attachment? '%s'\n", mime_type));
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index 37455a1..80fa6b6 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -1535,10 +1535,16 @@ efh_text_plain(EMFormatHTML *efh, CamelStream *stream, CamelMimePart *part, EMFo
 	guint32 flags;
 	guint32 rgb;
 	gint i, count, len;
+	gchar *meta;
+	gboolean is_fallback;
 	struct _EMFormatHTMLCache *efhc;
 
 	flags = efh->text_html_flags;
 
+	meta = camel_object_meta_get (part, "EMF-Fallback");
+	is_fallback = meta != NULL;
+	g_free (meta);
+
 	dw = camel_medium_get_content_object((CamelMedium *)part);
 
 	/* Check for RFC 2646 flowed text. */
@@ -1608,7 +1614,7 @@ efh_text_plain(EMFormatHTML *efh, CamelStream *stream, CamelMimePart *part, EMFo
 			continue;
 
 		type = camel_mime_part_get_content_type(newpart);
-		if (camel_content_type_is (type, "text", "*") && !camel_content_type_is(type, "text", "calendar")) {
+		if (camel_content_type_is (type, "text", "*") && (is_fallback || !camel_content_type_is (type, "text", "calendar"))) {
 			camel_stream_printf (
 				stream, "<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 10px; color: #%06x;\">\n",
 				e_color_to_value (



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