From a00322ed26f6bf67c0a082f6e7f0130cbf8114e6 Mon Sep 17 00:00:00 2001 From: guojin17 Date: Thu, 29 Dec 2022 10:56:01 +0800 Subject: [PATCH] Avoid direct use of libproxy --- 0003-Avoid-direct-use-of-libproxy.patch | 121 ++++++++++++++++++++++++ libreport.spec | 6 +- 2 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 0003-Avoid-direct-use-of-libproxy.patch diff --git a/0003-Avoid-direct-use-of-libproxy.patch b/0003-Avoid-direct-use-of-libproxy.patch new file mode 100644 index 0000000..5a786af --- /dev/null +++ b/0003-Avoid-direct-use-of-libproxy.patch @@ -0,0 +1,121 @@ +From dbcc94e02a88974967495303b69e487713d2cfdb Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Wed, 18 Aug 2021 17:03:34 -0500 +Subject: [PATCH] Avoid direct use of libproxy + +GProxyResolver has been around since GLib 2.26. There's no reason to use +libproxy directly anymore. GProxyResolver will call into libproxy if +GLib thinks it's a good idea to do so, except in distributions that are +configured to build glib-networking without libproxy support. + +Note that the existing code in get_proxy_list() was unsafely using +g_autofree and g_free() to free the memory allocated by libproxy. With +the switch to GProxyResolver, the memory is actually allocated by GLib +now, so this is now actually correct to do. + +Let's also initialize l = NULL just in case some weird bug results in a +non-NULL strv of zero length being returned. It should never happen, but +we would wind up using l uninitialize did it did. + +Signed-off-by: guojin17 +--- + configure.ac | 3 --- + src/lib/curl.c | 2 +- + src/lib/proxies.c | 37 +++++++++++-------------------------- + 3 files changed, 12 insertions(+), 30 deletions(-) + +diff --git a/configure.ac b/configure.ac +index fa97fa7..3e761e9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -224,9 +224,6 @@ PKG_CHECK_MODULES([GIO], [ + PKG_CHECK_MODULES([GOBJECT], [gobject-2.0]) + PKG_CHECK_MODULES([LIBXML], [libxml-2.0]) + PKG_CHECK_MODULES([CURL], [libcurl]) +-PKG_CHECK_MODULES([PROXY], [libproxy-1.0], [ +- AC_DEFINE([HAVE_PROXY], [1], [Use libproxy]) +-], [:]) + PKG_CHECK_MODULES([SATYR], [satyr]) + PKG_CHECK_MODULES([JOURNAL], [libsystemd]) + PKG_CHECK_MODULES([AUGEAS], [augeas]) +diff --git a/src/lib/curl.c b/src/lib/curl.c +index 9b7920a..78080bc 100644 +--- a/src/lib/curl.c ++++ b/src/lib/curl.c +@@ -102,7 +102,7 @@ CURLcode curl_easy_perform_with_proxy(CURL *handle, const char *url) + curl_err = curl_easy_perform(handle); + } + +- g_list_free_full(proxy_list, free); ++ g_list_free_full(proxy_list, g_free); + + return curl_err; + } +diff --git a/src/lib/proxies.c b/src/lib/proxies.c +index 3b46d9d..e60ef46 100644 +--- a/src/lib/proxies.c ++++ b/src/lib/proxies.c +@@ -19,49 +19,34 @@ + #include "internal_libreport.h" + #include "proxies.h" + +-#ifdef HAVE_PROXY +-#include +- +-static pxProxyFactory *px_factory; ++#include + + GList *get_proxy_list(const char *url) + { + int i; +- GList *l; +- g_autofree char **proxies = NULL; ++ GList *l = NULL; ++ GProxyResolver *resolver; ++ g_auto(GStrv) proxies = NULL; ++ g_autoptr(GError) error = NULL; + +- if (!px_factory) +- { +- px_factory = px_proxy_factory_new(); +- if (!px_factory) +- return NULL; +- } ++ resolver = g_proxy_resolver_get_default(); + +- /* Cast to char * is needed with libproxy versions before 0.4.0 */ +- proxies = px_proxy_factory_get_proxies(px_factory, (char *)url); ++ proxies = g_proxy_resolver_lookup(resolver, url, NULL, &error); + if (!proxies) ++ { ++ log_warning("Failed to perform proxy lookup for %s: %s", url, error->message); + return NULL; ++ } + + for (i = 0, l = NULL; proxies[i]; i++) +- l = g_list_append(l, proxies[i]); ++ l = g_list_append(l, g_steal_pointer(&proxies[i])); + + /* Don't set proxy if the list contains just "direct://" */ + if (l && !g_list_next(l) && !strcmp(l->data, "direct://")) + { +- g_free(l->data); + g_list_free(l); + l = NULL; + } + + return l; + } +- +-#else +- +-GList *get_proxy_list(const char *url) +-{ +- /* Without libproxy just return an empty list */ +- return NULL; +-} +- +-#endif +-- +1.8.3.1 + diff --git a/libreport.spec b/libreport.spec index b1645a9..7d08c3a 100644 --- a/libreport.spec +++ b/libreport.spec @@ -2,7 +2,7 @@ Name: libreport Version: 2.15.2 -Release: 4 +Release: 5 License: GPLv2+ Summary: Generic library for reporting various problems URL: https://abrt.readthedocs.org/ @@ -11,6 +11,7 @@ Source: https://github.com/abrt/%{name}/archive/%{version}/%{name}-%{version}.t Patch9000: fix-bug-delete-gtk-deprecation-warnings.patch Patch9001: 0001-Use-g_free-for-GLib-alloc-d-memory.patch Patch9002: 0002-changelog-Fix-links-to-commits.patch +Patch9003: 0003-Avoid-direct-use-of-libproxy.patch BuildRequires: dbus-devel gtk3-devel curl-devel desktop-file-utils python3-devel BuildRequires: gettext libxml2-devel libtar-devel intltool libtool texinfo asciidoc xmlto @@ -315,6 +316,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_mandir}/man5/bugzilla_format_kernel.conf.5.* %changelog +* Thu Dec 29 2022 guojin17 - 2.15.2-5 +- Avoid direct use of libproxy + * Thu Dec 29 2022 guojin17 - 2.15.2-4 - changelog Fix links to commits -- Gitee