summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <philip@tecnocode.co.uk>2010-09-30 17:31:48 +0100
committerPhilip Withnall <philip@tecnocode.co.uk>2010-09-30 19:18:28 +0100
commit135b790ca479085fec78e8f37de302cf2d04515c (patch)
tree4b1899e75825a9baf2784a405dcaba8bea3e001e
parentf37944aa5dabe5cb6c72002384ddb60416089738 (diff)
downloadlibgdata-135b790ca479085fec78e8f37de302cf2d04515c.tar.gz
gd: Fix attribute escaping for GDataGDOrganization
-rw-r--r--gdata/gd/gdata-gd-organization.c2
-rw-r--r--gdata/tests/general.c28
2 files changed, 29 insertions, 1 deletions
diff --git a/gdata/gd/gdata-gd-organization.c b/gdata/gd/gdata-gd-organization.c
index 71688504..0472f902 100644
--- a/gdata/gd/gdata-gd-organization.c
+++ b/gdata/gd/gdata-gd-organization.c
@@ -425,7 +425,7 @@ pre_get_xml (GDataParsable *parsable, GString *xml_string)
GDataGDOrganizationPrivate *priv = GDATA_GD_ORGANIZATION (parsable)->priv;
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->label != NULL)
gdata_parser_string_append_escaped (xml_string, " label='", priv->label, "'");
diff --git a/gdata/tests/general.c b/gdata/tests/general.c
index 03fcee06..c05d71ff 100644
--- a/gdata/tests/general.c
+++ b/gdata/tests/general.c
@@ -1754,6 +1754,33 @@ test_gd_organization (void)
}
static void
+test_gd_organization_escaping (void)
+{
+ GDataGDOrganization *org;
+ gchar *xml;
+
+ org = gdata_gd_organization_new ("Steptoe & Son", "Title & Stuff", GDATA_GD_ORGANIZATION_WORK "?foo&bar", "Personal & Private", TRUE);
+ gdata_gd_organization_set_department (org, "Department & Stuff");
+ gdata_gd_organization_set_job_description (org, "Escaping <brackets>.");
+ gdata_gd_organization_set_symbol (org, "<&>");
+
+ /* Check the outputted XML is escaped properly */
+ xml = gdata_parsable_get_xml (GDATA_PARSABLE (org));
+ g_assert_cmpstr (xml, ==,
+ "<?xml version='1.0' encoding='UTF-8'?>"
+ "<gd:organization xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' "
+ "rel='http://schemas.google.com/g/2005#work?foo&amp;bar' label='Personal &amp; Private' primary='true'>"
+ "<gd:orgName>Steptoe &amp; Son</gd:orgName>"
+ "<gd:orgTitle>Title &amp; Stuff</gd:orgTitle>"
+ "<gd:orgDepartment>Department &amp; Stuff</gd:orgDepartment>"
+ "<gd:orgJobDescription>Escaping &lt;brackets&gt;.</gd:orgJobDescription>"
+ "<gd:orgSymbol>&lt;&amp;&gt;</gd:orgSymbol>"
+ "</gd:organization>");
+ g_free (xml);
+ g_object_unref (org);
+}
+
+static void
test_gd_phone_number (void)
{
GDataGDPhoneNumber *phone, *phone2;
@@ -3127,6 +3154,7 @@ main (int argc, char *argv[])
g_test_add_func ("/gd/im_address/escaping", test_gd_im_address_escaping);
g_test_add_func ("/gd/name", test_gd_name);
g_test_add_func ("/gd/organization", test_gd_organization);
+ g_test_add_func ("/gd/organization/escaping", test_gd_organization_escaping);
g_test_add_func ("/gd/phone_number", test_gd_phone_number);
g_test_add_func ("/gd/postal_address", test_gd_postal_address);
g_test_add_func ("/gd/reminder", test_gd_reminder);