From 166994a7e40efea496e96ae7ec3d03d549ffeec9 Mon Sep 17 00:00:00 2001 From: Zhao Hang Date: Tue, 23 Jul 2024 10:19:47 +0800 Subject: [PATCH 1/2] update to libappstream-glib-0.7.18-5.src.rpm Signed-off-by: Zhao Hang --- ...Improve-handling-of-em-and-code-tags.patch | 243 ++++++++++++++++++ dist | 1 + libappstream-glib.spec | 26 +- 3 files changed, 253 insertions(+), 17 deletions(-) create mode 100644 0001-Improve-handling-of-em-and-code-tags.patch create mode 100644 dist diff --git a/0001-Improve-handling-of-em-and-code-tags.patch b/0001-Improve-handling-of-em-and-code-tags.patch new file mode 100644 index 0000000..954e15f --- /dev/null +++ b/0001-Improve-handling-of-em-and-code-tags.patch @@ -0,0 +1,243 @@ +diff -Nru appstream-glib-0.7.18/libappstream-glib/as-node.c appstream-glib-0.7.18/libappstream-glib/as-node.c +--- appstream-glib-0.7.18/libappstream-glib/as-node.c 2020-09-07 11:20:43.894573000 +0100 ++++ appstream-glib-0.7.18/libappstream-glib/as-node.c 2023-06-07 20:58:11.000000000 +0100 +@@ -555,6 +555,8 @@ + AsNode *current; + AsNodeFromXmlFlags flags; + const gchar * const *locales; ++ guint8 is_em_text:1; ++ guint8 is_code_text:1; + } AsNodeToXmlHelper; + + /** +@@ -604,6 +606,16 @@ + AsNode *current; + guint i; + ++ /* do not create a child node for em and code tags */ ++ if (g_strcmp0 (element_name, "em") == 0) { ++ helper->is_em_text = 1; ++ return; ++ } ++ if (g_strcmp0 (element_name, "code") == 0) { ++ helper->is_code_text = 1; ++ return; ++ } ++ + /* check if we should ignore the locale */ + data = g_slice_new0 (AsNodeData); + +@@ -662,6 +674,53 @@ + GError **error) + { + AsNodeToXmlHelper *helper = (AsNodeToXmlHelper *) user_data; ++ AsNodeData *data = helper->current->data; ++ ++ /* do not create a child node for em and code tags */ ++ if (g_strcmp0 (element_name, "em") == 0) { ++ helper->is_em_text = 0; ++ return; ++ } ++ if (g_strcmp0 (element_name, "code") == 0) { ++ helper->is_code_text = 0; ++ return; ++ } ++ ++ if (data->cdata != NULL) { ++ /* split up into lines and add each with spaces stripped */ ++ if ((helper->flags & AS_NODE_FROM_XML_FLAG_LITERAL_TEXT) == 0) { ++ AsRefString *cdata = data->cdata; ++ data->cdata = as_node_reflow_text (cdata, strlen (cdata)); ++ as_ref_string_unref (cdata); ++ } ++ ++ /* intern commonly duplicated tag values and save a bit of memory */ ++ if (data->is_tag_valid) { ++ AsNode *root = g_node_get_root (helper->current); ++ switch (data->tag) { ++ case AS_TAG_CATEGORY: ++ case AS_TAG_COMPULSORY_FOR_DESKTOP: ++ case AS_TAG_CONTENT_ATTRIBUTE: ++ case AS_TAG_DEVELOPER_NAME: ++ case AS_TAG_EXTENDS: ++ case AS_TAG_ICON: ++ case AS_TAG_ID: ++ case AS_TAG_KUDO: ++ case AS_TAG_LANG: ++ case AS_TAG_METADATA_LICENSE: ++ case AS_TAG_MIMETYPE: ++ case AS_TAG_PROJECT_GROUP: ++ case AS_TAG_PROJECT_LICENSE: ++ case AS_TAG_SOURCE_PKGNAME: ++ case AS_TAG_URL: ++ as_node_cdata_to_intern (root, data); ++ break; ++ default: ++ break; ++ } ++ } ++ } ++ + helper->current = helper->current->parent; + } + +@@ -693,8 +752,9 @@ + if (i >= text_len) + return; + +- /* split up into lines and add each with spaces stripped */ +- if (data->cdata != NULL) { ++ if (data->cdata != NULL && ++ g_strcmp0 (as_tag_data_get_name (data), "p") != 0 && ++ g_strcmp0 (as_tag_data_get_name (data), "li") != 0) { + g_set_error (error, + AS_NODE_ERROR, + AS_NODE_ERROR_INVALID_MARKUP, +@@ -703,37 +763,33 @@ + data->cdata, text); + return; + } +- if ((helper->flags & AS_NODE_FROM_XML_FLAG_LITERAL_TEXT) > 0) { +- data->cdata = as_ref_string_new_with_length (text, text_len + 1); +- } else { +- data->cdata = as_node_reflow_text (text, (gssize) text_len); +- } + +- /* intern commonly duplicated tag values and save a bit of memory */ +- if (data->is_tag_valid && data->cdata != NULL) { +- AsNode *root = g_node_get_root (helper->current); +- switch (data->tag) { +- case AS_TAG_CATEGORY: +- case AS_TAG_COMPULSORY_FOR_DESKTOP: +- case AS_TAG_CONTENT_ATTRIBUTE: +- case AS_TAG_DEVELOPER_NAME: +- case AS_TAG_EXTENDS: +- case AS_TAG_ICON: +- case AS_TAG_ID: +- case AS_TAG_KUDO: +- case AS_TAG_LANG: +- case AS_TAG_METADATA_LICENSE: +- case AS_TAG_MIMETYPE: +- case AS_TAG_PROJECT_GROUP: +- case AS_TAG_PROJECT_LICENSE: +- case AS_TAG_SOURCE_PKGNAME: +- case AS_TAG_URL: +- as_node_cdata_to_intern (root, data); +- break; +- default: +- break; ++ /* support em and code tags */ ++ if (helper->is_em_text || helper->is_code_text || data->cdata != NULL) { ++ g_autoptr(GString) str = g_string_new (NULL); ++ ++ if (data->cdata != NULL) { ++ g_string_append (str, data->cdata); ++ as_ref_string_unref (data->cdata); + } ++ ++ if (helper->is_em_text) ++ g_string_append (str, ""); ++ if (helper->is_code_text) ++ g_string_append (str, ""); ++ ++ g_string_append_len (str, text, text_len); ++ ++ if (helper->is_code_text) ++ g_string_append (str, ""); ++ if (helper->is_em_text) ++ g_string_append (str, ""); ++ ++ data->cdata = as_ref_string_new_with_length (str->str, str->len); ++ return; + } ++ ++ data->cdata = as_ref_string_new_with_length (text, text_len); + } + + static void +@@ -790,7 +846,7 @@ + AsNodeFromXmlFlags flags, + GError **error) + { +- AsNodeToXmlHelper helper; ++ AsNodeToXmlHelper helper = {0}; + AsNode *root = NULL; + gboolean ret; + g_autoptr(GError) error_local = NULL; +@@ -927,7 +983,7 @@ + GCancellable *cancellable, + GError **error) + { +- AsNodeToXmlHelper helper; ++ AsNodeToXmlHelper helper = {0}; + GError *error_local = NULL; + AsNode *root = NULL; + const gchar *content_type = NULL; +diff -Nru appstream-glib-0.7.18/libappstream-glib/as-self-test.c appstream-glib-0.7.18/libappstream-glib/as-self-test.c +--- appstream-glib-0.7.18/libappstream-glib/as-self-test.c 2020-09-07 11:20:43.896573000 +0100 ++++ appstream-glib-0.7.18/libappstream-glib/as-self-test.c 2023-06-07 20:58:11.000000000 +0100 +@@ -2861,6 +2861,20 @@ + "" + "baz" + ""; ++ const gchar *valid_em_code = "" ++ "

" ++ "It now also supports em and code tags." ++ "

" ++ "
"; ++ const gchar *valid_em_code_2 = "" ++ "

Emphasis at the start of the paragraph

" ++ "
"; ++ const gchar *valid_em_code_empty = "" ++ "

" ++ "
"; ++ const gchar *valid_em_code_empty_2 = "" ++ "

empty emphasis

" ++ "
"; + GError *error = NULL; + AsNode *n2; + AsNode *root; +@@ -2924,6 +2938,43 @@ + g_string_free (xml, TRUE); + as_node_unref (root); + ++ /* support em and code tags */ ++ root = as_node_from_xml (valid_em_code, 0, &error); ++ g_assert_no_error (error); ++ g_assert (root != NULL); ++ ++ n2 = as_node_find (root, "description/p"); ++ g_assert (n2 != NULL); ++ g_assert_cmpstr (as_node_get_data (n2), ==, "It now also supports em and code tags."); ++ as_node_unref (root); ++ ++ root = as_node_from_xml (valid_em_code_2, 0, &error); ++ g_assert_no_error (error); ++ g_assert (root != NULL); ++ ++ n2 = as_node_find (root, "description/p"); ++ g_assert (n2 != NULL); ++ g_assert_cmpstr (as_node_get_data (n2), ==, "Emphasis at the start of the paragraph"); ++ as_node_unref (root); ++ ++ root = as_node_from_xml (valid_em_code_empty, 0, &error); ++ g_assert_no_error (error); ++ g_assert (root != NULL); ++ ++ n2 = as_node_find (root, "description/p"); ++ g_assert (n2 != NULL); ++ g_assert_cmpstr (as_node_get_data (n2), ==, NULL); ++ as_node_unref (root); ++ ++ root = as_node_from_xml (valid_em_code_empty_2, 0, &error); ++ g_assert_no_error (error); ++ g_assert (root != NULL); ++ ++ n2 = as_node_find (root, "description/p"); ++ g_assert (n2 != NULL); ++ g_assert_cmpstr (as_node_get_data (n2), ==, "empty emphasis"); ++ as_node_unref (root); ++ + /* keep comments */ + root = as_node_from_xml (valid, + AS_NODE_FROM_XML_FLAG_KEEP_COMMENTS, diff --git a/dist b/dist new file mode 100644 index 0000000..9b27344 --- /dev/null +++ b/dist @@ -0,0 +1 @@ +an9_4 diff --git a/libappstream-glib.spec b/libappstream-glib.spec index 57db08f..5614159 100644 --- a/libappstream-glib.spec +++ b/libappstream-glib.spec @@ -1,5 +1,4 @@ -%define anolis_release .0.1 -%global glib2_version 2.68.4 +%global glib2_version 2.45.8 %global libsoup_version 2.51.92 %global json_glib_version 1.1.2 %global gdk_pixbuf_version 2.31.5 @@ -7,11 +6,14 @@ Summary: Library for AppStream metadata Name: libappstream-glib Version: 0.7.18 -Release: 4%{anolis_release}%{?dist} +Release: 5%{?dist} License: LGPLv2+ URL: http://people.freedesktop.org/~hughsient/appstream-glib/ Source0: http://people.freedesktop.org/~hughsient/appstream-glib/releases/appstream-glib-%{version}.tar.xz +# backported from upstream +Patch0: 0001-Improve-handling-of-em-and-code-tags.patch + BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: docbook-utils BuildRequires: gtk-doc @@ -76,14 +78,6 @@ Recommends: pngquant This library and command line tool is used for building AppStream metadata from a directory of packages. -%package doc -Summary: Documents for %{name} -BuildArch: noarch -Requires: %{name} = %{version}-%{release} - -%description doc -Doc pages for %{name}. - %prep %autosetup -p1 -Sgit -n appstream-glib-%{version} @@ -104,6 +98,7 @@ Doc pages for %{name}. %files -f appstream-glib.lang %license COPYING +%doc README.md AUTHORS NEWS %{_libdir}/libappstream-glib.so.8* %{_libdir}/girepository-1.0/*.typelib %{_bindir}/appstream-util @@ -138,13 +133,10 @@ Doc pages for %{name}. %{_libdir}/asb-plugins-%{as_plugin_version}/libasb_plugin_shell_extension.so %{_mandir}/man1/appstream-builder.1.gz -%files doc -%doc README.md AUTHORS NEWS - %changelog -* Fri Aug 11 2023 Xiaoping Liu - 0.7.18-4.0.1 -- Add doc sub package -- Rebuilt for glib2 2.68.4 flags +* Fri Apr 26 2024 Richard Hughes 0.7.18-5 +- Backport a patch from upstream to fix handling unknown tags in AppStream metadata +- Resolves: #RHEL-34564 * Mon Aug 09 2021 Mohan Boddu - 0.7.18-4 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags -- Gitee From 863dbdf24dfc800dfbed46456f9547b832c13463 Mon Sep 17 00:00:00 2001 From: Bo Ren Date: Tue, 19 Jul 2022 16:21:26 +0800 Subject: [PATCH 2/2] spec: add doc sub package Signed-off-by: Bo Ren --- libappstream-glib.spec | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libappstream-glib.spec b/libappstream-glib.spec index 5614159..f3498f5 100644 --- a/libappstream-glib.spec +++ b/libappstream-glib.spec @@ -1,3 +1,4 @@ +%define anolis_release .0.1 %global glib2_version 2.45.8 %global libsoup_version 2.51.92 %global json_glib_version 1.1.2 @@ -6,7 +7,7 @@ Summary: Library for AppStream metadata Name: libappstream-glib Version: 0.7.18 -Release: 5%{?dist} +Release: 5%{anolis_release}%{?dist} License: LGPLv2+ URL: http://people.freedesktop.org/~hughsient/appstream-glib/ Source0: http://people.freedesktop.org/~hughsient/appstream-glib/releases/appstream-glib-%{version}.tar.xz @@ -78,6 +79,14 @@ Recommends: pngquant This library and command line tool is used for building AppStream metadata from a directory of packages. +%package doc +Summary: Documents for %{name} +BuildArch: noarch +Requires: %{name} = %{version}-%{release} + +%description doc +Doc pages for %{name}. + %prep %autosetup -p1 -Sgit -n appstream-glib-%{version} @@ -98,7 +107,6 @@ from a directory of packages. %files -f appstream-glib.lang %license COPYING -%doc README.md AUTHORS NEWS %{_libdir}/libappstream-glib.so.8* %{_libdir}/girepository-1.0/*.typelib %{_bindir}/appstream-util @@ -133,7 +141,13 @@ from a directory of packages. %{_libdir}/asb-plugins-%{as_plugin_version}/libasb_plugin_shell_extension.so %{_mandir}/man1/appstream-builder.1.gz +%files doc +%doc README.md AUTHORS NEWS + %changelog +* Tue Jul 23 2024 Xiaoping Liu - 0.7.18-5.0.1 +- Add doc sub package + * Fri Apr 26 2024 Richard Hughes 0.7.18-5 - Backport a patch from upstream to fix handling unknown tags in AppStream metadata - Resolves: #RHEL-34564 -- Gitee