]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
userdb: Use "goto out" pattern for _dbus_groups_from_uid()
authorSimon McVittie <smcv@collabora.com>
Thu, 29 Jun 2023 16:51:48 +0000 (17:51 +0100)
committerSimon McVittie <smcv@collabora.com>
Mon, 21 Aug 2023 13:49:31 +0000 (13:49 +0000)
This makes it easier to verify that _dbus_user_database_unlock_system()
is called on all exit paths. The only early-return is when locking the
userdb failed.

Signed-off-by: Simon McVittie <smcv@collabora.com>
dbus/dbus-userdb-util.c

index 558acff10381a7f221e032eae2638b669227c430..736244955bdedf18351a76b94861473ff043f9b4 100644 (file)
@@ -353,6 +353,8 @@ _dbus_groups_from_uid (dbus_uid_t         uid,
 {
   DBusUserDatabase *db;
   const DBusUserInfo *info;
+  dbus_bool_t ret = FALSE;
+
   *group_ids = NULL;
   *n_group_ids = 0;
 
@@ -366,15 +368,11 @@ _dbus_groups_from_uid (dbus_uid_t         uid,
   if (db == NULL)
     {
       _DBUS_SET_OOM (error);
-      _dbus_user_database_unlock_system ();
-      return FALSE;
+      goto out;
     }
 
   if (!_dbus_user_database_get_uid (db, uid, &info, error))
-    {
-      _dbus_user_database_unlock_system ();
-      return FALSE;
-    }
+    goto out;
 
   _dbus_assert (info->uid == uid);
   
@@ -384,8 +382,7 @@ _dbus_groups_from_uid (dbus_uid_t         uid,
       if (*group_ids == NULL)
         {
           _DBUS_SET_OOM (error);
-         _dbus_user_database_unlock_system ();
-          return FALSE;
+          goto out;
         }
 
       *n_group_ids = info->n_group_ids;
@@ -393,7 +390,10 @@ _dbus_groups_from_uid (dbus_uid_t         uid,
       memcpy (*group_ids, info->group_ids, info->n_group_ids * sizeof (dbus_gid_t));
     }
 
+  ret = TRUE;
+out:
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, ret);
   _dbus_user_database_unlock_system ();
-  return TRUE;
+  return ret;
 }
 /** @} */