changeset 19592:d6802883e96e

Treat status messages as the plaintext that they are. Specifically, strip markup on user-entered status text, and escape special characters on incoming status messages. Now status messages should be displayed correctly. Closes #2637.
author Jeffrey Connelly <jaconnel@calpoly.edu>
date Mon, 03 Sep 2007 05:16:36 +0000
parents 94a2a1ccd6ec
children dd4b1dc8a0ce
files libpurple/protocols/myspace/markup.c libpurple/protocols/myspace/myspace.c
diffstat 2 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/myspace/markup.c	Sun Sep 02 02:27:12 2007 +0000
+++ b/libpurple/protocols/myspace/markup.c	Mon Sep 03 05:16:36 2007 +0000
@@ -669,6 +669,8 @@
 
 /** High-level function to convert Purple (HTML) to MySpaceIM markup.
  *
+ * TODO: consider using purple_markup_html_to_xhtml() to make valid XML.
+ *
  * @return HTML markup string, must be g_free()'d. */
 gchar *
 html_to_msim_markup(MsimSession *session, const gchar *raw)
--- a/libpurple/protocols/myspace/myspace.c	Sun Sep 02 02:27:12 2007 +0000
+++ b/libpurple/protocols/myspace/myspace.c	Mon Sep 03 05:16:36 2007 +0000
@@ -1066,9 +1066,12 @@
 	statstring = purple_status_get_attr_string(status, "message");
 
 	if (!statstring) {
-		statstring = g_strdup("");
+		statstring = "";
 	}
 
+	/* Status strings are plain text. */
+	statstring = purple_markup_strip_html(statstring);
+
 	msim_set_status_code(session, status_code, g_strdup(statstring));
 }
 
@@ -1713,7 +1716,7 @@
 	PurpleBuddyList *blist;
 	MsimUser *user;
 	GList *list;
-	gchar *status_headline;
+	gchar *status_headline, *status_headline_escaped;
 	gint status_code, purple_status_code;
 	gchar *username;
 
@@ -1768,8 +1771,16 @@
 		purple_debug_info("msim", "msim_status: found buddy %s\n", username);
 	}
 
+	/* The status headline is plaintext, but libpurple treats it as HTML,
+	 * so escape any HTML characters to their entity equivalents. */
+	status_headline_escaped = g_markup_escape_text(status_headline, strlen(status_headline));
+	g_free(status_headline);
+
+	if (user->headline) 
+		g_free(user->headline);
+
 	/* don't copy; let the MsimUser own the headline, memory-wise */
-	user->headline = status_headline;
+	user->headline = status_headline_escaped;
   
 	/* Set user status */
 	switch (status_code) {