!15 revert update
From: @sherlock2010 Reviewed-by: @t_feng Signed-off-by: @t_feng
This commit is contained in:
commit
b94028f49d
50
backport-xml-Don-t-crash-parsing-empty-XML-string.patch
Normal file
50
backport-xml-Don-t-crash-parsing-empty-XML-string.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From a217a9fea1a1cfb2bee3263b0ea08b860535af8d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christophe Fergeau <cfergeau@redhat.com>
|
||||||
|
Date: Mon, 16 Oct 2017 10:48:33 +0200
|
||||||
|
Subject: [PATCH] xml: Don't crash parsing empty XML string
|
||||||
|
|
||||||
|
Calling rest_xml_parser_parse_from_data() with an empty string ("")
|
||||||
|
currently causes a crash as xmlReaderForMemory() returns NULL in that
|
||||||
|
case, and we then try to dereference this pointer without checking it's
|
||||||
|
non-NULL.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=789053
|
||||||
|
---
|
||||||
|
rest/rest-xml-parser.c | 3 +++
|
||||||
|
tests/xml.c | 6 ++++++
|
||||||
|
2 files changed, 9 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rest/rest-xml-parser.c b/rest/rest-xml-parser.c
|
||||||
|
index ffa6ff3..796052e 100644
|
||||||
|
--- a/rest/rest-xml-parser.c
|
||||||
|
+++ b/rest/rest-xml-parser.c
|
||||||
|
@@ -103,6 +103,9 @@ rest_xml_parser_parse_from_data (RestXmlParser *parser,
|
||||||
|
NULL, /* URL? */
|
||||||
|
NULL, /* encoding */
|
||||||
|
XML_PARSE_RECOVER | XML_PARSE_NOCDATA);
|
||||||
|
+ if (reader == NULL) {
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
xmlTextReaderSetErrorHandler(reader, rest_xml_parser_xml_reader_error, NULL);
|
||||||
|
|
||||||
|
while (xmlTextReaderRead (reader) == 1)
|
||||||
|
diff --git a/tests/xml.c b/tests/xml.c
|
||||||
|
index 4b7718b..9d03e29 100644
|
||||||
|
--- a/tests/xml.c
|
||||||
|
+++ b/tests/xml.c
|
||||||
|
@@ -34,6 +34,12 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
|
parser = rest_xml_parser_new ();
|
||||||
|
|
||||||
|
+ root = rest_xml_parser_parse_from_data (parser, "", -1);
|
||||||
|
+ g_assert (root == NULL);
|
||||||
|
+
|
||||||
|
+ root = rest_xml_parser_parse_from_data (parser, "<invalid", -1);
|
||||||
|
+ g_assert (root == NULL);
|
||||||
|
+
|
||||||
|
root = rest_xml_parser_parse_from_data (parser, TEST_XML, strlen (TEST_XML));
|
||||||
|
g_assert (root);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
218
rest-0.8.0-fix-the-XML-test.patch
Normal file
218
rest-0.8.0-fix-the-XML-test.patch
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
From a09ea6bd74d6234be8456e7039403bc1c1d078bd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christophe Fergeau <cfergeau@redhat.com>
|
||||||
|
Date: Mon, 20 Jun 2016 12:05:48 +0200
|
||||||
|
Subject: [PATCH 1/4] xml-node: Use GString in rest_xml_node_print()
|
||||||
|
|
||||||
|
The current code is using xml = g_strconcat (xml, ...) which is causing
|
||||||
|
some leaks as g_strconcat returns a newly allocated string. Using
|
||||||
|
GString avoids this issue without constantly freeing the intermediate
|
||||||
|
strings.
|
||||||
|
|
||||||
|
This fixes multiple leaks like:
|
||||||
|
|
||||||
|
==16611== 18 bytes in 1 blocks are definitely lost in loss record 124 of 301
|
||||||
|
==16611== at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)
|
||||||
|
==16611== by 0x5F5CE58: g_malloc (gmem.c:94)
|
||||||
|
==16611== by 0x5F75B8E: g_strconcat (gstrfuncs.c:585)
|
||||||
|
==16611== by 0x4E450CF: rest_xml_node_print (rest-xml-node.c:287)
|
||||||
|
==16611== by 0x4E451DA: rest_xml_node_print (rest-xml-node.c:305)
|
||||||
|
==16611== by 0x4E450F8: rest_xml_node_print (rest-xml-node.c:292)
|
||||||
|
==16611== by 0x4009A0: main (xml.c:40)
|
||||||
|
---
|
||||||
|
rest/rest-xml-node.c | 21 ++++++++++++---------
|
||||||
|
1 file changed, 12 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/rest/rest-xml-node.c b/rest/rest-xml-node.c
|
||||||
|
index 57a942667f06..a8156dbbd432 100644
|
||||||
|
--- a/rest/rest-xml-node.c
|
||||||
|
+++ b/rest/rest-xml-node.c
|
||||||
|
@@ -283,38 +283,41 @@ rest_xml_node_print (RestXmlNode *node)
|
||||||
|
{
|
||||||
|
GHashTableIter iter;
|
||||||
|
gpointer key, value;
|
||||||
|
- char *xml = g_strconcat ("<", node->name, NULL);
|
||||||
|
+ GString *xml = g_string_new (NULL);
|
||||||
|
RestXmlNode *n;
|
||||||
|
|
||||||
|
+ g_string_append (xml, "<");
|
||||||
|
+ g_string_append (xml, node->name);
|
||||||
|
+
|
||||||
|
g_hash_table_iter_init (&iter, node->attrs);
|
||||||
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
|
- xml = g_strconcat (xml, " ", key, "=\'", value, "\'", NULL);
|
||||||
|
+ g_string_append_printf (xml, " %s =\'%s\'", (char *)key, (char *)value);
|
||||||
|
|
||||||
|
- xml = g_strconcat (xml, ">", NULL);
|
||||||
|
+ g_string_append (xml, ">");
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, node->children);
|
||||||
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
|
{
|
||||||
|
char *child = rest_xml_node_print ((RestXmlNode *) value);
|
||||||
|
|
||||||
|
- xml = g_strconcat (xml, child, NULL);
|
||||||
|
+ g_string_append (xml, child);
|
||||||
|
g_free (child);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node->content)
|
||||||
|
- xml = g_strconcat (xml, node->content, "</", node->name, ">", NULL);
|
||||||
|
- else
|
||||||
|
- xml = g_strconcat (xml, "</", node->name, ">", NULL);
|
||||||
|
+ g_string_append (xml, node->content);
|
||||||
|
+
|
||||||
|
+ g_string_append_printf (xml, "</%s>", node->name);
|
||||||
|
|
||||||
|
for (n = node->next; n; n = n->next)
|
||||||
|
{
|
||||||
|
char *sibling = rest_xml_node_print (n);
|
||||||
|
|
||||||
|
- xml = g_strconcat (xml, sibling, NULL);
|
||||||
|
+ g_string_append (xml, sibling);
|
||||||
|
g_free (sibling);
|
||||||
|
}
|
||||||
|
|
||||||
|
- return xml;
|
||||||
|
+ return g_string_free (xml, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
--
|
||||||
|
2.14.2
|
||||||
|
|
||||||
|
|
||||||
|
From a34d02947c4f102e6d16b9d328941a4b2946c8e8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Debarshi Ray <debarshir@gnome.org>
|
||||||
|
Date: Fri, 13 Oct 2017 18:53:39 +0200
|
||||||
|
Subject: [PATCH 2/4] xml-node: Remove stray blank space
|
||||||
|
|
||||||
|
This had broken tests/xml.c.
|
||||||
|
|
||||||
|
Fallout from 61a7b231bd8b9d1b8d02dca120389e79d38b428d
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=788960
|
||||||
|
---
|
||||||
|
rest/rest-xml-node.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/rest/rest-xml-node.c b/rest/rest-xml-node.c
|
||||||
|
index a8156dbbd432..d3a7c995affd 100644
|
||||||
|
--- a/rest/rest-xml-node.c
|
||||||
|
+++ b/rest/rest-xml-node.c
|
||||||
|
@@ -291,7 +291,7 @@ rest_xml_node_print (RestXmlNode *node)
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, node->attrs);
|
||||||
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
|
- g_string_append_printf (xml, " %s =\'%s\'", (char *)key, (char *)value);
|
||||||
|
+ g_string_append_printf (xml, " %s=\'%s\'", (char *)key, (char *)value);
|
||||||
|
|
||||||
|
g_string_append (xml, ">");
|
||||||
|
|
||||||
|
--
|
||||||
|
2.14.2
|
||||||
|
|
||||||
|
|
||||||
|
From f184db2bff0618b99c4de3316082fe80439f124c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Debarshi Ray <debarshir@gnome.org>
|
||||||
|
Date: Fri, 13 Oct 2017 19:14:16 +0200
|
||||||
|
Subject: [PATCH 3/4] xml-node: Define the order in which attributes & children
|
||||||
|
are printed
|
||||||
|
|
||||||
|
The order in which GHashTable returns its key-value pairs is undefined.
|
||||||
|
Therefore the output of rest_xml_node_print can change based on the
|
||||||
|
GHashTable implementation. While not strictly necessary, it would be
|
||||||
|
nice to avoid that. Having a stable order, even if it is not
|
||||||
|
documented and depends on the current RestXmlNode code, is handy for
|
||||||
|
testing.
|
||||||
|
|
||||||
|
This was the main reason behind the tests/xml.c breakage.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=788960
|
||||||
|
---
|
||||||
|
rest/rest-xml-node.c | 23 ++++++++++++++++++++++-
|
||||||
|
1 file changed, 22 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/rest/rest-xml-node.c b/rest/rest-xml-node.c
|
||||||
|
index d3a7c995affd..973ebcf6c3fa 100644
|
||||||
|
--- a/rest/rest-xml-node.c
|
||||||
|
+++ b/rest/rest-xml-node.c
|
||||||
|
@@ -283,6 +283,9 @@ rest_xml_node_print (RestXmlNode *node)
|
||||||
|
{
|
||||||
|
GHashTableIter iter;
|
||||||
|
gpointer key, value;
|
||||||
|
+ GList *attrs = NULL;
|
||||||
|
+ GList *children = NULL;
|
||||||
|
+ GList *l;
|
||||||
|
GString *xml = g_string_new (NULL);
|
||||||
|
RestXmlNode *n;
|
||||||
|
|
||||||
|
@@ -291,13 +294,29 @@ rest_xml_node_print (RestXmlNode *node)
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, node->attrs);
|
||||||
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
|
- g_string_append_printf (xml, " %s=\'%s\'", (char *)key, (char *)value);
|
||||||
|
+ {
|
||||||
|
+ char *attr = g_strdup_printf ("%s=\'%s\'", (char *)key, (char *)value);
|
||||||
|
+ attrs = g_list_prepend (attrs, attr);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ attrs = g_list_sort (attrs, (GCompareFunc) g_strcmp0);
|
||||||
|
+ for (l = attrs; l; l = l->next)
|
||||||
|
+ {
|
||||||
|
+ const char *attr = (const char *) l->data;
|
||||||
|
+ g_string_append_printf (xml, " %s", attr);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
g_string_append (xml, ">");
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, node->children);
|
||||||
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
|
+ children = g_list_prepend (children, key);
|
||||||
|
+
|
||||||
|
+ children = g_list_sort (children, (GCompareFunc) g_strcmp0);
|
||||||
|
+ for (l = children; l; l = l->next)
|
||||||
|
{
|
||||||
|
+ const char *name = (const char *) l->data;
|
||||||
|
+ RestXmlNode *value = (RestXmlNode *) g_hash_table_lookup (node->children, name);
|
||||||
|
char *child = rest_xml_node_print ((RestXmlNode *) value);
|
||||||
|
|
||||||
|
g_string_append (xml, child);
|
||||||
|
@@ -317,6 +336,8 @@ rest_xml_node_print (RestXmlNode *node)
|
||||||
|
g_free (sibling);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ g_list_free_full (attrs, g_free);
|
||||||
|
+ g_list_free (children);
|
||||||
|
return g_string_free (xml, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.14.2
|
||||||
|
|
||||||
|
|
||||||
|
From e5ee6ef751ee5a38d7b9fadcd631cf6ecec7b240 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Debarshi Ray <debarshir@gnome.org>
|
||||||
|
Date: Fri, 13 Oct 2017 19:16:55 +0200
|
||||||
|
Subject: [PATCH 4/4] tests: Re-enable the XML test
|
||||||
|
|
||||||
|
This reverts commit 2d1dbfe7073b1e153ff881426b40a9a517fb796b
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=788960
|
||||||
|
---
|
||||||
|
tests/Makefile.am | 2 --
|
||||||
|
1 file changed, 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||||
|
index 5d77f9cf5445..5ffdd4634e9a 100644
|
||||||
|
--- a/tests/Makefile.am
|
||||||
|
+++ b/tests/Makefile.am
|
||||||
|
@@ -1,6 +1,4 @@
|
||||||
|
TESTS = proxy proxy-continuous threaded oauth oauth-async oauth2 flickr lastfm xml custom-serialize
|
||||||
|
-# TODO: fix this test case
|
||||||
|
-XFAIL_TESTS = xml
|
||||||
|
|
||||||
|
AM_CPPFLAGS = $(SOUP_CFLAGS) -I$(top_srcdir) $(GCOV_CFLAGS)
|
||||||
|
AM_LDFLAGS = $(SOUP_LIBS) $(GCOV_LDFLAGS) \
|
||||||
|
--
|
||||||
|
2.14.2
|
||||||
|
|
||||||
BIN
rest-0.8.1.tar.xz
Normal file
BIN
rest-0.8.1.tar.xz
Normal file
Binary file not shown.
Binary file not shown.
54
rest.spec
54
rest.spec
@ -1,12 +1,16 @@
|
|||||||
Name: rest
|
Name: rest
|
||||||
Version: 0.9.1
|
Version: 0.8.1
|
||||||
Release: 1
|
Release: 8
|
||||||
Summary: A library for access to RESTful web services
|
Summary: A library for access to RESTful web services
|
||||||
License: LGPLv2
|
License: LGPLv2
|
||||||
URL: https://www.gnome.org
|
URL: https://www.gnome.org
|
||||||
Source0: https://download.gnome.org/sources/%{name}/0.8/%{name}-%{version}.tar.xz
|
Source0: https://download.gnome.org/sources/%{name}/0.8/%{name}-%{version}.tar.xz
|
||||||
BuildRequires: glib2-devel libsoup3-devel libxml2-devel gobject-introspection-devel
|
|
||||||
BuildRequires: gtk-doc autoconf automake libtool libxslt meson libadwaita-devel gtksourceview5-devel gi-docgen
|
Patch0: rest-0.8.0-fix-the-XML-test.patch
|
||||||
|
Patch1: backport-xml-Don-t-crash-parsing-empty-XML-string.patch
|
||||||
|
|
||||||
|
BuildRequires: glib2-devel libsoup-devel libxml2-devel gobject-introspection-devel
|
||||||
|
BuildRequires: gtk-doc autoconf automake libtool libxslt
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This library has been designed to make it easier to access web services that
|
This library has been designed to make it easier to access web services that
|
||||||
@ -23,22 +27,18 @@ This package is the development files for rest.
|
|||||||
|
|
||||||
%package_help
|
%package_help
|
||||||
|
|
||||||
%package demo
|
|
||||||
Summary: Demo application for %{name}
|
|
||||||
Requires: %{name} = %{version}-%{release}
|
|
||||||
|
|
||||||
%description demo
|
|
||||||
Demo application for %{name}.
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n %{name}-%{version} -p1
|
%autosetup -n %{name}-%{version} -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%meson
|
autoreconf -fiv
|
||||||
%meson_build
|
%configure --enable-gtk-doc --enable-introspection=yes
|
||||||
|
%make_build
|
||||||
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%meson_install
|
%make_install
|
||||||
|
%delete_la
|
||||||
|
|
||||||
%ldconfig_scriptlets
|
%ldconfig_scriptlets
|
||||||
|
|
||||||
@ -46,33 +46,27 @@ Demo application for %{name}.
|
|||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%doc AUTHORS
|
%doc AUTHORS
|
||||||
%license COPYING
|
%license COPYING
|
||||||
%{_libdir}/librest-1.0.so.*
|
%{_libdir}/librest-0.7.so.*
|
||||||
%{_libdir}/librest-extras-1.0.so.*
|
%{_libdir}/librest-extras-0.7.so.*
|
||||||
%{_libdir}/girepository-1.0/Rest-*
|
%{_libdir}/girepository-1.0/Rest-*
|
||||||
%{_libdir}/girepository-1.0/RestExtras-*
|
%{_libdir}/girepository-1.0/RestExtras-*
|
||||||
|
|
||||||
%files help
|
|
||||||
%defattr(-,root,root)
|
|
||||||
%{_datadir}/doc/librest-1.0
|
|
||||||
|
|
||||||
%files demo
|
|
||||||
%{_datadir}/applications/org.gnome.RestDemo.desktop
|
|
||||||
%{_bindir}/librest-demo
|
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%{_includedir}/rest-1.0
|
%{_includedir}/rest-0.7
|
||||||
%{_libdir}/librest-1.0.so
|
%{_libdir}/librest-0.7.so
|
||||||
%{_libdir}/librest-extras-1.0.so
|
%{_libdir}/librest-extras-0.7.so
|
||||||
%{_datadir}/gir-1.0/Rest-*
|
%{_datadir}/gir-1.0/Rest-*
|
||||||
%{_datadir}/gir-1.0/RestExtras-*
|
%{_datadir}/gir-1.0/RestExtras-*
|
||||||
%{_libdir}/pkgconfig/rest*
|
%{_libdir}/pkgconfig/rest*
|
||||||
%{_datadir}/doc/librest-1.0/
|
|
||||||
|
%files help
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%doc README
|
||||||
|
%{_datadir}/gtk-doc/html/rest-0.7
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jul 28 2022 fushanqing <fushanqing@kylinos.cn> - 0.9.1-1
|
|
||||||
- update rest to 0.9.1
|
|
||||||
|
|
||||||
* Wed Nov 09 2022 zhouyihang <zhouyihang3@h-partners.com> - 0.8.1-8
|
* Wed Nov 09 2022 zhouyihang <zhouyihang3@h-partners.com> - 0.8.1-8
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- Id:NA
|
- Id:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user