changeset 28098:7a211be81a6b

Strip off the outer <html> and <body> from iChat messages. Should Fix #9968. A recent fix in purple_markup_strip_html exposed an issue with iChat messages, since they contain an <html/> that is not the outermost element. Before, what was passed to libpurple looked like this: <font back="#E68CBD"><font color="#000000"><html><body ichatballooncolor="#E68CBD" ichattextcolor="#000000"><font face="Helvetica" ABSZ=12 color="#000000">message</font></body></html></font></font> Now, it looks like this: <font back="#E68CBD"><font color="#000000"><font face="Helvetica" ABSZ=12 color="#000000">message</font></font></font> Better than it was before? Yes. Worth fixing the fact there are 3 font tags? Probably not. My iChat friend is offline, but it worked properly when I tested this routine all by itself.
author Paul Aurich <paul@darkrain42.org>
date Wed, 26 Aug 2009 05:55:25 +0000
parents 572073acf8e7
children 18e361e0a3ec
files libpurple/protocols/oscar/oscar.c
diffstat 1 files changed, 15 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/oscar/oscar.c	Wed Aug 26 01:09:33 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Wed Aug 26 05:55:25 2009 +0000
@@ -2405,6 +2405,21 @@
 	if (purple_markup_find_tag("body", tmp, &start, &end, &attribs))
 	{
 		const char *ichattextcolor, *ichatballooncolor;
+		const char *start2, *end2;
+		GData *unused;
+
+		/*
+		 * Find the ending </body> so we can strip off the outer <html/>
+		 * and <body/>
+		 */
+		if (purple_markup_find_tag("/body", end + 1, &start2, &end2, &unused))
+		{
+			gchar *tmp2;
+			tmp2 = g_strndup(end + 1, (start2 - 1) - (end + 1) + 1);
+			g_free(tmp);
+			tmp = tmp2;
+			g_datalist_clear(&unused);
+		}
 
 		ichattextcolor = g_datalist_get_data(&attribs, "ichattextcolor");
 		if (ichattextcolor != NULL)