diff options
author | Colin Walters <walters@verbum.org> | 2014-07-22 14:08:00 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2014-07-23 07:43:41 -0400 |
commit | e55a953642a9e402f4363f9fa347b6061dd78990 (patch) | |
tree | 75d39c9a69e276edc9eb93b1e836e46cf32dbd7d | |
parent | 49a5d0f6f2aed99cd78f25655f137f4448e47d92 (diff) |
gthreadedresolver: Unref unexpected address
I don't believe any real app would hit this, but we do leak
if it occurs.
Spotted by static analysis.
https://bugzilla.gnome.org/show_bug.cgi?id=733576
-rw-r--r-- | gio/gthreadedresolver.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c index 9bb864c7f..c02c593c2 100644 --- a/gio/gthreadedresolver.c +++ b/gio/gthreadedresolver.c @@ -88,8 +88,13 @@ do_lookup_by_name (GTask *task, for (ai = res; ai; ai = ai->ai_next) { sockaddr = g_socket_address_new_from_native (ai->ai_addr, ai->ai_addrlen); - if (!sockaddr || !G_IS_INET_SOCKET_ADDRESS (sockaddr)) + if (!sockaddr) continue; + if (!G_IS_INET_SOCKET_ADDRESS (sockaddr)) + { + g_clear_object (&sockaddr); + continue; + } addr = g_object_ref (g_inet_socket_address_get_address ((GInetSocketAddress *)sockaddr)); addresses = g_list_prepend (addresses, addr); |