gthreadedresolver: Unref unexpected address
authorColin Walters <walters@verbum.org>
Tue, 22 Jul 2014 18:08:00 +0000 (14:08 -0400)
committerColin Walters <walters@verbum.org>
Wed, 23 Jul 2014 11:43:41 +0000 (07:43 -0400)
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

gio/gthreadedresolver.c

index 9bb864c..c02c593 100644 (file)
@@ -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);