Blame SOURCES/rest-0.8.0-fix-the-XML-test.patch

856c29
From a09ea6bd74d6234be8456e7039403bc1c1d078bd Mon Sep 17 00:00:00 2001
856c29
From: Christophe Fergeau <cfergeau@redhat.com>
856c29
Date: Mon, 20 Jun 2016 12:05:48 +0200
856c29
Subject: [PATCH 1/4] xml-node: Use GString in rest_xml_node_print()
856c29
856c29
The current code is using xml = g_strconcat (xml, ...) which is causing
856c29
some leaks as g_strconcat returns a newly allocated string. Using
856c29
GString avoids this issue without constantly freeing the intermediate
856c29
strings.
856c29
856c29
This fixes multiple leaks like:
856c29
856c29
==16611== 18 bytes in 1 blocks are definitely lost in loss record 124 of 301
856c29
==16611==    at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)
856c29
==16611==    by 0x5F5CE58: g_malloc (gmem.c:94)
856c29
==16611==    by 0x5F75B8E: g_strconcat (gstrfuncs.c:585)
856c29
==16611==    by 0x4E450CF: rest_xml_node_print (rest-xml-node.c:287)
856c29
==16611==    by 0x4E451DA: rest_xml_node_print (rest-xml-node.c:305)
856c29
==16611==    by 0x4E450F8: rest_xml_node_print (rest-xml-node.c:292)
856c29
==16611==    by 0x4009A0: main (xml.c:40)
856c29
---
856c29
 rest/rest-xml-node.c | 21 ++++++++++++---------
856c29
 1 file changed, 12 insertions(+), 9 deletions(-)
856c29
856c29
diff --git a/rest/rest-xml-node.c b/rest/rest-xml-node.c
856c29
index 57a942667f06..a8156dbbd432 100644
856c29
--- a/rest/rest-xml-node.c
856c29
+++ b/rest/rest-xml-node.c
856c29
@@ -283,38 +283,41 @@ rest_xml_node_print (RestXmlNode *node)
856c29
 {
856c29
   GHashTableIter iter;
856c29
   gpointer       key, value;
856c29
-  char          *xml = g_strconcat ("<", node->name, NULL);
856c29
+  GString        *xml = g_string_new (NULL);
856c29
   RestXmlNode   *n;
856c29
 
856c29
+  g_string_append (xml, "<");
856c29
+  g_string_append (xml, node->name);
856c29
+
856c29
   g_hash_table_iter_init (&iter, node->attrs);
856c29
   while (g_hash_table_iter_next (&iter, &key, &value))
856c29
-    xml = g_strconcat (xml, " ", key, "=\'", value, "\'", NULL);
856c29
+    g_string_append_printf (xml, " %s =\'%s\'", (char *)key, (char *)value);
856c29
 
856c29
-  xml = g_strconcat (xml, ">", NULL);
856c29
+  g_string_append (xml, ">");
856c29
 
856c29
   g_hash_table_iter_init (&iter, node->children);
856c29
   while (g_hash_table_iter_next (&iter, &key, &value))
856c29
     {
856c29
       char *child = rest_xml_node_print ((RestXmlNode *) value);
856c29
 
856c29
-      xml = g_strconcat (xml, child, NULL);
856c29
+      g_string_append (xml, child);
856c29
       g_free (child);
856c29
     }
856c29
 
856c29
   if (node->content)
856c29
-    xml = g_strconcat (xml, node->content, "</", node->name, ">", NULL);
856c29
-  else
856c29
-    xml = g_strconcat (xml, "</", node->name, ">", NULL);
856c29
+    g_string_append (xml, node->content);
856c29
+
856c29
+  g_string_append_printf (xml, "</%s>", node->name);
856c29
 
856c29
   for (n = node->next; n; n = n->next)
856c29
     {
856c29
       char *sibling = rest_xml_node_print (n);
856c29
 
856c29
-      xml = g_strconcat (xml, sibling, NULL);
856c29
+      g_string_append (xml, sibling);
856c29
       g_free (sibling);
856c29
     }
856c29
 
856c29
-  return xml;
856c29
+  return g_string_free (xml, FALSE);
856c29
 }
856c29
 
856c29
 /**
856c29
-- 
856c29
2.14.2
856c29
856c29
856c29
From a34d02947c4f102e6d16b9d328941a4b2946c8e8 Mon Sep 17 00:00:00 2001
856c29
From: Debarshi Ray <debarshir@gnome.org>
856c29
Date: Fri, 13 Oct 2017 18:53:39 +0200
856c29
Subject: [PATCH 2/4] xml-node: Remove stray blank space
856c29
856c29
This had broken tests/xml.c.
856c29
856c29
Fallout from 61a7b231bd8b9d1b8d02dca120389e79d38b428d
856c29
856c29
https://bugzilla.gnome.org/show_bug.cgi?id=788960
856c29
---
856c29
 rest/rest-xml-node.c | 2 +-
856c29
 1 file changed, 1 insertion(+), 1 deletion(-)
856c29
856c29
diff --git a/rest/rest-xml-node.c b/rest/rest-xml-node.c
856c29
index a8156dbbd432..d3a7c995affd 100644
856c29
--- a/rest/rest-xml-node.c
856c29
+++ b/rest/rest-xml-node.c
856c29
@@ -291,7 +291,7 @@ rest_xml_node_print (RestXmlNode *node)
856c29
 
856c29
   g_hash_table_iter_init (&iter, node->attrs);
856c29
   while (g_hash_table_iter_next (&iter, &key, &value))
856c29
-    g_string_append_printf (xml, " %s =\'%s\'", (char *)key, (char *)value);
856c29
+    g_string_append_printf (xml, " %s=\'%s\'", (char *)key, (char *)value);
856c29
 
856c29
   g_string_append (xml, ">");
856c29
 
856c29
-- 
856c29
2.14.2
856c29
856c29
856c29
From f184db2bff0618b99c4de3316082fe80439f124c Mon Sep 17 00:00:00 2001
856c29
From: Debarshi Ray <debarshir@gnome.org>
856c29
Date: Fri, 13 Oct 2017 19:14:16 +0200
856c29
Subject: [PATCH 3/4] xml-node: Define the order in which attributes & children
856c29
 are printed
856c29
856c29
The order in which GHashTable returns its key-value pairs is undefined.
856c29
Therefore the output of rest_xml_node_print can change based on the
856c29
GHashTable implementation. While not strictly necessary, it would be
856c29
nice to avoid that. Having a stable order, even if it is not
856c29
documented and depends on the current RestXmlNode code, is handy for
856c29
testing.
856c29
856c29
This was the main reason behind the tests/xml.c breakage.
856c29
856c29
https://bugzilla.gnome.org/show_bug.cgi?id=788960
856c29
---
856c29
 rest/rest-xml-node.c | 23 ++++++++++++++++++++++-
856c29
 1 file changed, 22 insertions(+), 1 deletion(-)
856c29
856c29
diff --git a/rest/rest-xml-node.c b/rest/rest-xml-node.c
856c29
index d3a7c995affd..973ebcf6c3fa 100644
856c29
--- a/rest/rest-xml-node.c
856c29
+++ b/rest/rest-xml-node.c
856c29
@@ -283,6 +283,9 @@ rest_xml_node_print (RestXmlNode *node)
856c29
 {
856c29
   GHashTableIter iter;
856c29
   gpointer       key, value;
856c29
+  GList          *attrs = NULL;
856c29
+  GList          *children = NULL;
856c29
+  GList          *l;
856c29
   GString        *xml = g_string_new (NULL);
856c29
   RestXmlNode   *n;
856c29
 
856c29
@@ -291,13 +294,29 @@ rest_xml_node_print (RestXmlNode *node)
856c29
 
856c29
   g_hash_table_iter_init (&iter, node->attrs);
856c29
   while (g_hash_table_iter_next (&iter, &key, &value))
856c29
-    g_string_append_printf (xml, " %s=\'%s\'", (char *)key, (char *)value);
856c29
+    {
856c29
+      char *attr = g_strdup_printf ("%s=\'%s\'", (char *)key, (char *)value);
856c29
+      attrs = g_list_prepend (attrs, attr);
856c29
+    }
856c29
+
856c29
+  attrs = g_list_sort (attrs, (GCompareFunc) g_strcmp0);
856c29
+  for (l = attrs; l; l = l->next)
856c29
+    {
856c29
+      const char *attr = (const char *) l->data;
856c29
+      g_string_append_printf (xml, " %s", attr);
856c29
+    }
856c29
 
856c29
   g_string_append (xml, ">");
856c29
 
856c29
   g_hash_table_iter_init (&iter, node->children);
856c29
   while (g_hash_table_iter_next (&iter, &key, &value))
856c29
+    children = g_list_prepend (children, key);
856c29
+
856c29
+  children = g_list_sort (children, (GCompareFunc) g_strcmp0);
856c29
+  for (l = children; l; l = l->next)
856c29
     {
856c29
+      const char *name = (const char *) l->data;
856c29
+      RestXmlNode *value = (RestXmlNode *) g_hash_table_lookup (node->children, name);
856c29
       char *child = rest_xml_node_print ((RestXmlNode *) value);
856c29
 
856c29
       g_string_append (xml, child);
856c29
@@ -317,6 +336,8 @@ rest_xml_node_print (RestXmlNode *node)
856c29
       g_free (sibling);
856c29
     }
856c29
 
856c29
+  g_list_free_full (attrs, g_free);
856c29
+  g_list_free (children);
856c29
   return g_string_free (xml, FALSE);
856c29
 }
856c29
 
856c29
-- 
856c29
2.14.2
856c29
856c29
856c29
From e5ee6ef751ee5a38d7b9fadcd631cf6ecec7b240 Mon Sep 17 00:00:00 2001
856c29
From: Debarshi Ray <debarshir@gnome.org>
856c29
Date: Fri, 13 Oct 2017 19:16:55 +0200
856c29
Subject: [PATCH 4/4] tests: Re-enable the XML test
856c29
856c29
This reverts commit 2d1dbfe7073b1e153ff881426b40a9a517fb796b
856c29
856c29
https://bugzilla.gnome.org/show_bug.cgi?id=788960
856c29
---
856c29
 tests/Makefile.am | 2 --
856c29
 1 file changed, 2 deletions(-)
856c29
856c29
diff --git a/tests/Makefile.am b/tests/Makefile.am
856c29
index 5d77f9cf5445..5ffdd4634e9a 100644
856c29
--- a/tests/Makefile.am
856c29
+++ b/tests/Makefile.am
856c29
@@ -1,6 +1,4 @@
856c29
 TESTS = proxy proxy-continuous threaded oauth oauth-async oauth2 flickr lastfm xml custom-serialize
856c29
-# TODO: fix this test case
856c29
-XFAIL_TESTS = xml
856c29
 
856c29
 AM_CPPFLAGS = $(SOUP_CFLAGS) -I$(top_srcdir) $(GCOV_CFLAGS)
856c29
 AM_LDFLAGS = $(SOUP_LIBS) $(GCOV_LDFLAGS) \
856c29
-- 
856c29
2.14.2
856c29