Re: [evolution-patches] fix for bug #63377




No this is wrong.  Try looking closer, the charset is set by em-folder-view which monitors changes to the value.  You shouldn't re-read it here, it should only be set by invoking set_default_charset().

The idea is any quoting or replying should be passed a 'source' formatter, so it can get the layout info, charset the user is using, etc.  But that isn't always avaible.  The charset should be set on the formatter when its created from the current value.  em-folder-view should just cache that value, and use that.

(there is a practical reason to do this, and it makes em-format a more re-usable object by not tying it to the gconf value directly).

On Wed, 2004-08-25 at 16:59 -0400, Jeffrey Stedfast wrote:
that pesky g_assert (*inptr == '@'); crash again...

surprisingly nothing in the mailer code actually used
the /apps/evolution/mail/display/charset setting until now...

this forces UTF-8 conversion which of course truncates out bad character
sequences which then means that e_trie_search() gets sane input

not sure if we want to bother making e_trie_search() more robust against
garbage non-UTF-8 input, but I had started to look at fixing it that way
originally until I realised that the mailer was simply not doing any
charset conversion (which was a far simpler fix).

I think what is happening in e_trie_search() is that prev is getting set
to an invalid UTF-8 char in one pass of the while-loop and then the next
pass finds a '@' and sets pat = prev; and then returns pat, which of
course is invalid.

or something like that... I thought I had it figured out but now looking
at it I'm confused again so I dunno :)

text/plain attachment (63377.patch)
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3438
diff -u -r1.3438 ChangeLog
--- ChangeLog	24 Aug 2004 02:54:03 -0000	1.3438
+++ ChangeLog	25 Aug 2004 20:55:59 -0000
@@ -1,3 +1,26 @@
+2004-08-25  Jeffrey Stedfast  <fejj novell com>
+
+	Fix for bug #63377
+
+	* em-format.c (em_format_format_text): Make sure that 'charset' is
+	never NULL, if it's NULL, then use 'iso-8859-1' this way we will
+	never pass invalid UTF-8 to the tohtml filter.
+	(emf_init): Init emf->default_charset to use the mailer charset
+	setting (up until now, nothing actually used that in mailer!?!?)
+	(emf_finalise): Free the default_charset string (would have leaked
+	if it were ever actually used before).
+
+2004-08-24  Jeffrey Stedfast  <fejj novell com>
+
+	Fix for bug #63177
+
+	* em-folder-tree.c (emft_drop_async_drop): Check full_name == NULL
+	rather than full_name[0] since store's have NULL full_names, not
+	empty string (like they used to).
+	(emft_drop_folder): Same.
+	(tree_drag_data_received): Don't abort the drop if the user
+	dropped on a store, this is allowed (depending on the store).
+
 2004-08-23  Not Zed  <NotZed Ximian com>
 
 	* em-folder-tree.c (em_folder_tree_set_selected): store the
Index: em-format.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-format.c,v
retrieving revision 1.38
diff -u -r1.38 em-format.c
--- em-format.c	10 Jul 2004 01:31:04 -0000	1.38
+++ em-format.c	25 Aug 2004 20:55:59 -0000
@@ -32,6 +32,8 @@
 #include <libgnomevfs/gnome-vfs-mime-utils.h>
 #include <libgnomevfs/gnome-vfs-mime-handlers.h>
 
+#include <gconf/gconf-client.h>
+
 #include <e-util/e-msgport.h>
 #include <camel/camel-url.h>
 #include <camel/camel-stream.h>
@@ -116,11 +118,16 @@
 emf_init(GObject *o)
 {
 	EMFormat *emf = (EMFormat *)o;
+	GConfClient *gconf;
 	
 	emf->inline_table = g_hash_table_new(g_str_hash, g_str_equal);
 	e_dlist_init(&emf->header_list);
 	em_format_default_headers(emf);
 	emf->part_id = g_string_new("");
+	
+	gconf = gconf_client_get_default ();
+	emf->default_charset = gconf_client_get_string (gconf, "/apps/evolution/mail/display/charset", NULL);
+	g_object_unref (gconf);
 }
 
 static void
@@ -136,6 +143,7 @@
 
 	em_format_clear_headers(emf);
 	camel_cipher_validity_free(emf->valid);
+	g_free (emf->default_charset);
 	g_free(emf->charset);
 	g_string_free(emf->part_id, TRUE);
 
@@ -1016,7 +1024,8 @@
 		
 		charset = camel_mime_filter_windows_real_charset (windows);
 	} else if (charset == NULL) {
-		charset = emf->default_charset;
+		if (!(charset = emf->default_charset))
+			charset = "iso-8859-1";
 	}
 	
 	filter_stream = camel_stream_filter_new_with_stream(stream);
--
Michael Zucchi <notzed ximian com>
"born to die, live to work, it's all downhill from here"
Novell's Evolution and Free Software Developer


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