[tracker] Never send non-utf8 over DBus, never ever!



commit 2f4a4e91316d14056d8d1cb55bf4ecc587ed5733
Author: Philip Van Hoof <philip codeminded be>
Date:   Thu Jul 16 17:31:38 2009 +0200

    Never send non-utf8 over DBus, never ever!

 src/tracker-miner-fs/modules/evolution-imap.c      |   32 ++++++++++---------
 src/tracker-miner-fs/modules/evolution-pop.c       |   17 ++++-------
 .../tracker-module-metadata-utils.c                |    2 +-
 3 files changed, 24 insertions(+), 27 deletions(-)
---
diff --git a/src/tracker-miner-fs/modules/evolution-imap.c b/src/tracker-miner-fs/modules/evolution-imap.c
index 2e98890..84713b6 100644
--- a/src/tracker-miner-fs/modules/evolution-imap.c
+++ b/src/tracker-miner-fs/modules/evolution-imap.c
@@ -780,15 +780,9 @@ extract_message_text (GMimeObject *object,
 
         encoding = evolution_common_get_object_encoding (object);
 
-        if (!encoding) {
-                /* FIXME: This will break for non-utf8 text without
-                 * the proper content type set
-                 */
-                g_string_append_len (body, content, (gssize) len);
-        } else {
+        if (encoding) {
                 part_body = g_convert (content, (gssize) len, "utf8", encoding, NULL, NULL, NULL);
                 g_string_append (body, part_body);
-
                 g_free (part_body);
                 g_free (encoding);
         }
@@ -931,17 +925,23 @@ get_message_metadata (TrackerModuleFile *file)
 		tracker_sparql_builder_predicate (sparql, "nmo:sentDate");
 		tracker_sparql_builder_object_date (sparql, &t);
 
-		tracker_sparql_builder_predicate (sparql, "nmo:sender");
-		tracker_sparql_builder_object_string (sparql, from);
+		if (g_utf8_validate (from, -1, NULL)) {
+			tracker_sparql_builder_predicate (sparql, "nmo:sender");
+			tracker_sparql_builder_object_string (sparql, from);
+		}
 
-		tracker_sparql_builder_predicate (sparql, "nmo:messageSubject");
-		tracker_sparql_builder_object_string (sparql, subject);
+		if (g_utf8_validate (subject, -1, NULL)) {
+			tracker_sparql_builder_predicate (sparql, "nmo:messageSubject");
+			tracker_sparql_builder_object_string (sparql, subject);
+		}
 
 		list = get_recipient_list (to);
 
 		for (l = list; l; l = l->next) {
-			tracker_sparql_builder_predicate (sparql, "nmo:to");
-			tracker_sparql_builder_object_string (sparql, l->data);
+			if (g_utf8_validate (l->data, -1, NULL)) {
+				tracker_sparql_builder_predicate (sparql, "nmo:to");
+				tracker_sparql_builder_object_string (sparql, l->data);
+			}
 			g_free (l->data);
 		}
 
@@ -950,8 +950,10 @@ get_message_metadata (TrackerModuleFile *file)
 		list = get_recipient_list (cc);
 
 		for (l = list; l; l = l->next) {
-			tracker_sparql_builder_predicate (sparql, "nmo:cc");
-			tracker_sparql_builder_object_string (sparql, l->data);
+			if (g_utf8_validate (l->data, -1, NULL)) {
+				tracker_sparql_builder_predicate (sparql, "nmo:cc");
+				tracker_sparql_builder_object_string (sparql, l->data);
+			}
 			g_free (l->data);
 		}
 
diff --git a/src/tracker-miner-fs/modules/evolution-pop.c b/src/tracker-miner-fs/modules/evolution-pop.c
index 2f35d6f..4e1169b 100644
--- a/src/tracker-miner-fs/modules/evolution-pop.c
+++ b/src/tracker-miner-fs/modules/evolution-pop.c
@@ -243,7 +243,7 @@ static gchar *
 tracker_evolution_pop_file_get_text (TrackerModuleFile *file)
 {
         TrackerEvolutionPopFile *self;
-        gchar *text, *encoding, *utf8_text;
+        gchar *text, *encoding, *utf8_text = NULL;
         gboolean is_html;
 
         self = TRACKER_EVOLUTION_POP_FILE (file);
@@ -261,17 +261,12 @@ tracker_evolution_pop_file_get_text (TrackerModuleFile *file)
 
         encoding = evolution_common_get_object_encoding (GMIME_OBJECT (self->message));
 
-        if (!encoding) {
-                /* FIXME: could still puke on non-utf8
-                 * messages without proper content type
-                 */
-                return text;
-        }
-
-        utf8_text = g_convert (text, -1, "utf8", encoding, NULL, NULL, NULL);
+        if (encoding) {
+             utf8_text = g_convert (text, -1, "utf8", encoding, NULL, NULL, NULL);
 
-        g_free (encoding);
-        g_free (text);
+             g_free (encoding);
+             g_free (text);
+        }
 
         return utf8_text;
 }
diff --git a/src/tracker-miner-fs/tracker-module-metadata-utils.c b/src/tracker-miner-fs/tracker-module-metadata-utils.c
index 0ecd315..ad81c55 100644
--- a/src/tracker-miner-fs/tracker-module-metadata-utils.c
+++ b/src/tracker-miner-fs/tracker-module-metadata-utils.c
@@ -815,7 +815,7 @@ tracker_module_metadata_utils_get_data (GFile *file, TrackerSparqlBuilder *sparq
 	time_ = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_TIME_ACCESS);
 	tracker_sparql_builder_predicate (sparql, "nfo:fileLastAccessed");
 	
-tracker_sparql_builder_object_date (sparql, &time_);
+	tracker_sparql_builder_object_date (sparql, &time_);
 
 	/* Check the size is actually non-zero */
 	if (g_file_info_get_size (file_info) > 0) {



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