[telepathy-gabble/master] Don't use self if it is NULL.

Mike Ruprecht mike.ruprecht at collabora.co.uk
Mon Dec 7 07:36:15 PST 2009


Upon discussion with Sjoerd I learned that it was possible for a GAsync
function to be cancelled, but still return a valid result. In this case, that
would mean the GabbleJingleFactory was disposed. With my previous assumption
that the error handler would have caught any condition where the factory was
NULL, this could have tried to access the disposed factory. This commit fixes
that assumption.
---
 src/jingle-factory.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/jingle-factory.c b/src/jingle-factory.c
index 7e53134..fec75d1 100644
--- a/src/jingle-factory.c
+++ b/src/jingle-factory.c
@@ -186,9 +186,7 @@ stun_server_resolved_cb (GObject *resolver,
       DEBUG ("Failed to resolve STUN server %s:%u: %s",
           data->stun_server, data->stun_port, e->message);
       g_error_free (e);
-      pending_stun_server_free (data);
-      g_object_unref (resolver);
-      return;
+      goto out;
     }
 
   stun_server = g_inet_address_to_string (entries->data);
@@ -197,6 +195,12 @@ stun_server_resolved_cb (GObject *resolver,
   DEBUG ("Resolved STUN server %s:%u to %s:%u", data->stun_server,
       data->stun_port, stun_server, data->stun_port);
 
+  if (self == NULL)
+    {
+      g_free (stun_server);
+      goto out;
+    }
+
   if (data->fallback)
     {
       g_free (self->priv->fallback_stun_server);
@@ -210,6 +214,7 @@ stun_server_resolved_cb (GObject *resolver,
       self->priv->stun_port = data->stun_port;
     }
 
+out:
   pending_stun_server_free (data);
   g_object_unref (resolver);
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list