[glib/glib-2-28] gdbusconnection: Avoid tripping assertion if we fail to authenticate twice



commit 3ea204ccf704167dcbf1c0ae1ecd690c795ca99c
Author: Colin Walters <walters verbum org>
Date:   Wed Apr 13 14:03:58 2011 -0400

    gdbusconnection: Avoid tripping assertion if we fail to authenticate twice
    
    If g_bus_get_sync() fails in authentication (because e.g. the process
    uid, doesn't match the expected in EXTERNAL), a secondary call to
    g_bus_get_sync() would notice we aren't initialized, and try
    to initialize.
    
    The assertion here is just wrong; we now explicitly and clearly handle
    both cases where we already have an error, or we already succeeded.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=635694
    Signed-off-by: David Zeuthen <davidz redhat com>

 gio/gdbusconnection.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)
---
diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
index 35c6772..26b430c 100644
--- a/gio/gdbusconnection.c
+++ b/gio/gdbusconnection.c
@@ -2268,15 +2268,20 @@ initable_init (GInitable     *initable,
 
   ret = FALSE;
 
+  /* First, handle the case where the connection already has an
+   * initialization error set.
+   */
+  if (connection->initialization_error != NULL)
+    goto out;
+
+  /* Also make this a no-op if we're already initialized fine */
   if (connection->is_initialized)
     {
-      if (connection->stream != NULL)
-        ret = TRUE;
-      else
-        g_assert (connection->initialization_error != NULL);
+      ret = TRUE;
       goto out;
     }
-  g_assert (connection->initialization_error == NULL);
+
+  g_assert (connection->initialization_error == NULL && !connection->is_initialized);
 
   /* The user can pass multiple (but mutally exclusive) construct
    * properties:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]