diff options
author | Jamie McCracken <jamiemcc@src.gnome.org> | 2007-08-07 22:23:29 +0000 |
---|---|---|
committer | Jamie McCracken <jamiemcc@src.gnome.org> | 2007-08-07 22:23:29 +0000 |
commit | fec7f9463f24324acef2e4a4bb3d6a20cae435dd (patch) | |
tree | 09f785e67b438a1cc86aef40370302c6ece183f1 | |
parent | 24d6cad2c534ce1925cd27bdf9d2126d2e9abd62 (diff) | |
download | tracker-fec7f9463f24324acef2e4a4bb3d6a20cae435dd.tar.gz |
fixed utf-8 validation of saved emails
svn path=/trunk/; revision=756
-rw-r--r-- | src/trackerd/tracker-db-email.c | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/src/trackerd/tracker-db-email.c b/src/trackerd/tracker-db-email.c index 3e96f63d6..a8ea680cd 100644 --- a/src/trackerd/tracker-db-email.c +++ b/src/trackerd/tracker-db-email.c @@ -405,6 +405,31 @@ get_attachment_service_name (MailApplication app) } +static inline char * +get_utf8 (const char *str) +{ + + if (!str) return NULL; + + int len = strlen (str); + + if (!g_utf8_validate (str, len, NULL)) { + + char *value; + + value = g_locale_to_utf8 (str, len, NULL, NULL, NULL); + + if (value) { + return value; + } + + } else { + return g_strdup (str); + } + + return NULL; + +} gboolean tracker_db_email_save_email (DBConnection *db_con, MailMessage *mm) @@ -517,7 +542,13 @@ tracker_db_email_save_email (DBConnection *db_con, MailMessage *mm) str_date = tracker_date_to_str (mm->date); if (mm->body) { - tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Body", mm->body, index_table); + char *value = get_utf8 (mm->body); + + if (value) { + tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Body", value, index_table); + g_free (value); + } + } if (str_date) { @@ -525,11 +556,21 @@ tracker_db_email_save_email (DBConnection *db_con, MailMessage *mm) } if (mm->from) { - tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Sender", mm->from, index_table); + char *value = get_utf8 (mm->from); + + if (value) { + tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Sender", value, index_table); + g_free (value); + } } if (mm->subject) { - tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Subject", mm->subject, index_table); + char *value = get_utf8 (mm->subject); + + if (value) { + tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Subject", value, index_table); + g_free (value); + } } g_free (str_date); |