[gnome-control-center] user-accounts: check for NULL on um_realm_object_get_common



commit 3e6b741ad2cc749040ec073098aa9a7fb1a8c222
Author: Ondrej Holy <oholy redhat com>
Date:   Wed Feb 25 14:31:28 2015 +0100

    user-accounts: check for NULL on um_realm_object_get_common
    
    um_realm_object_get_common can return NULL, which shouldn't be passed
    into subsequent functions to avoid crashes.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705351

 panels/user-accounts/um-account-dialog.c |    8 ++++++++
 panels/user-accounts/um-realm-manager.c  |   10 ++++++----
 panels/user-accounts/um-user-panel.c     |    3 +++
 3 files changed, 17 insertions(+), 4 deletions(-)
---
diff --git a/panels/user-accounts/um-account-dialog.c b/panels/user-accounts/um-account-dialog.c
index 7fb44ce..21a22aa 100644
--- a/panels/user-accounts/um-account-dialog.c
+++ b/panels/user-accounts/um-account-dialog.c
@@ -655,6 +655,8 @@ enterprise_add_realm (UmAccountDialog *self,
         gchar *name;
 
         common = um_realm_object_get_common (realm);
+        g_return_if_fail (common != NULL);
+
         realm_name = um_realm_common_get_name (common);
 
         /*
@@ -793,6 +795,12 @@ enterprise_permit_user_login (UmAccountDialog *self)
         GVariant *options;
 
         common = um_realm_object_get_common (self->selected_realm);
+        if (common != NULL) {
+                g_debug ("Failed to register account: failed to get d-bus interface");
+                show_error_dialog (self, _("Failed to register account"), NULL);
+                finish_action (self);
+                return;
+        }
 
         login = um_realm_calculate_login (common, gtk_entry_get_text (self->enterprise_login));
         g_return_if_fail (login != NULL);
diff --git a/panels/user-accounts/um-realm-manager.c b/panels/user-accounts/um-realm-manager.c
index 0849160..8a0a0e6 100644
--- a/panels/user-accounts/um-realm-manager.c
+++ b/panels/user-accounts/um-realm-manager.c
@@ -479,12 +479,14 @@ um_realm_is_configured (UmRealmObject *realm)
 {
         UmRealmCommon *common;
         const gchar *configured;
-        gboolean is;
+        gboolean is = FALSE;
 
         common = um_realm_object_get_common (realm);
-        configured = um_realm_common_get_configured (common);
-        is = configured != NULL && !g_str_equal (configured, "");
-        g_object_unref (common);
+        if (common != NULL) {
+                configured = um_realm_common_get_configured (common);
+                is = configured != NULL && !g_str_equal (configured, "");
+                g_object_unref (common);
+        }
 
         return is;
 }
diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c
index d9f7be0..a16b3b3 100644
--- a/panels/user-accounts/um-user-panel.c
+++ b/panels/user-accounts/um-user-panel.c
@@ -524,6 +524,9 @@ find_matching_realm (UmRealmManager *realm_manager, const gchar *login)
                 gint i;
 
                 common = um_realm_object_get_common (l->data);
+                if (common == NULL)
+                        continue;
+
                 permitted_logins = um_realm_common_get_permitted_logins (common);
                 for (i = 0; permitted_logins[i] != NULL; i++) {
                         if (g_strcmp0 (permitted_logins[i], login) == 0)


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