From e81c9098b06b76d6b747773528f2a65e82e57ec2 Mon Sep 17 00:00:00 2001 From: Egor Bychin Date: Mon, 11 Oct 2021 14:02:33 +0300 Subject: [PATCH] gproxyaddressenumerator: Fix string leakage on an invalid input --- gio/gproxyaddressenumerator.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gio/gproxyaddressenumerator.c b/gio/gproxyaddressenumerator.c index d3de4940c..654baade5 100644 --- a/gio/gproxyaddressenumerator.c +++ b/gio/gproxyaddressenumerator.c @@ -262,8 +262,12 @@ g_proxy_address_enumerator_next (GSocketAddressEnumerator *enumerator, } dest_protocol = g_uri_parse_scheme (priv->dest_uri); - g_return_val_if_fail (G_IS_INET_SOCKET_ADDRESS (priv->proxy_address), - NULL); + if (!G_IS_INET_SOCKET_ADDRESS (priv->proxy_address)) + { + g_free (dest_hostname); + g_free (dest_protocol); + } + g_return_val_if_fail (G_IS_INET_SOCKET_ADDRESS (priv->proxy_address), NULL); inetsaddr = G_INET_SOCKET_ADDRESS (priv->proxy_address); inetaddr = g_inet_socket_address_get_address (inetsaddr); @@ -352,6 +356,11 @@ return_result (GTask *task) } dest_protocol = g_uri_parse_scheme (priv->dest_uri); + if (!G_IS_INET_SOCKET_ADDRESS (priv->proxy_address)) + { + g_free (dest_hostname); + g_free (dest_protocol); + } g_return_if_fail (G_IS_INET_SOCKET_ADDRESS (priv->proxy_address)); inetsaddr = G_INET_SOCKET_ADDRESS (priv->proxy_address);