[libgdata] gd: Fix attribute escaping for GDataGDWho



commit 98efcfaac4f06ebe25ea434f9337b18319d15bb7
Author: Philip Withnall <philip tecnocode co uk>
Date:   Thu Sep 30 19:17:59 2010 +0100

    gd: Fix attribute escaping for GDataGDWho

 gdata/gd/gdata-gd-who.c |    4 ++--
 gdata/tests/general.c   |   20 ++++++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)
---
diff --git a/gdata/gd/gdata-gd-who.c b/gdata/gd/gdata-gd-who.c
index e575ec8..1264ed9 100644
--- a/gdata/gd/gdata-gd-who.c
+++ b/gdata/gd/gdata-gd-who.c
@@ -253,9 +253,9 @@ pre_get_xml (GDataParsable *parsable, GString *xml_string)
 	GDataGDWhoPrivate *priv = GDATA_GD_WHO (parsable)->priv;
 
 	if (priv->email_address != NULL)
-		g_string_append_printf (xml_string, " email='%s'", priv->email_address);
+		gdata_parser_string_append_escaped (xml_string, " email='", priv->email_address, "'");
 	if (priv->relation_type != NULL)
-		g_string_append_printf (xml_string, " rel='%s'", priv->relation_type);
+		gdata_parser_string_append_escaped (xml_string, " rel='", priv->relation_type, "'");
 	if (priv->value_string != NULL)
 		gdata_parser_string_append_escaped (xml_string, " valueString='", priv->value_string, "'");
 }
diff --git a/gdata/tests/general.c b/gdata/tests/general.c
index 3b010f8..1754be2 100644
--- a/gdata/tests/general.c
+++ b/gdata/tests/general.c
@@ -2350,6 +2350,25 @@ test_gd_who (void)
 }
 
 static void
+test_gd_who_escaping (void)
+{
+	GDataGDWho *who;
+	gchar *xml;
+
+	who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ATTENDEE "?foo&bar", "Value string & stuff!", "John Smith <john smith gmail com>");
+
+	/* Check the outputted XML is escaped properly */
+	xml = gdata_parsable_get_xml (GDATA_PARSABLE (who));
+	g_assert_cmpstr (xml, ==,
+	                 "<?xml version='1.0' encoding='UTF-8'?>"
+	                 "<gd:who xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' "
+	                         "email='John Smith &lt;john smith gmail com&gt;' rel='http://schemas.google.com/g/2005#event.attendee?foo&amp;bar' "
+	                         "valueString='Value string &amp; stuff!'/>");
+	g_free (xml);
+	g_object_unref (who);
+}
+
+static void
 test_media_category (void)
 {
 	GDataMediaCategory *category;
@@ -3289,6 +3308,7 @@ main (int argc, char *argv[])
 	g_test_add_func ("/gd/where", test_gd_where);
 	g_test_add_func ("/gd/where/escaping", test_gd_where_escaping);
 	g_test_add_func ("/gd/who", test_gd_who);
+	g_test_add_func ("/gd/who/escaping", test_gd_who_escaping);
 
 	g_test_add_func ("/media/category", test_media_category);
 	g_test_add_func ("/media/content", test_media_content);



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