119 lines
4.5 KiB
Diff
119 lines
4.5 KiB
Diff
From f067fb9bc471f176b6f6693fd9da5307c35bac3c Mon Sep 17 00:00:00 2001
|
|
From: Ray Strode <rstrode@redhat.com>
|
|
Date: Thu, 22 Jul 2021 14:46:50 -0400
|
|
Subject: [PATCH 3/3] local-display-factory: Fix overrun in session type list
|
|
generation
|
|
|
|
Some confusion in the session type list generation from GNOME/gdm!146,
|
|
means we could actually overrun the list.
|
|
|
|
This commit fixes that.
|
|
---
|
|
daemon/gdm-local-display-factory.c | 16 +++++++++-------
|
|
1 file changed, 9 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
|
|
index 0bb3851f..f2da3b6e 100644
|
|
--- a/daemon/gdm-local-display-factory.c
|
|
+++ b/daemon/gdm-local-display-factory.c
|
|
@@ -202,87 +202,89 @@ get_preferred_display_server (GdmLocalDisplayFactory *factory)
|
|
|
|
gdm_settings_direct_get_string (GDM_KEY_PREFERRED_DISPLAY_SERVER, &preferred_display_server);
|
|
|
|
if (g_strcmp0 (preferred_display_server, "wayland") == 0) {
|
|
if (wayland_enabled)
|
|
return g_strdup (preferred_display_server);
|
|
else
|
|
return g_strdup ("xorg");
|
|
}
|
|
|
|
if (g_strcmp0 (preferred_display_server, "xorg") == 0) {
|
|
if (xorg_enabled)
|
|
return g_strdup (preferred_display_server);
|
|
else
|
|
return g_strdup ("wayland");
|
|
}
|
|
|
|
if (g_strcmp0 (preferred_display_server, "legacy-xorg") == 0) {
|
|
if (xorg_enabled)
|
|
return g_strdup (preferred_display_server);
|
|
}
|
|
|
|
return g_strdup ("none");
|
|
}
|
|
|
|
static const char *
|
|
gdm_local_display_factory_get_session_type (GdmLocalDisplayFactory *factory,
|
|
gboolean should_fall_back)
|
|
{
|
|
const char *session_types[3] = { NULL };
|
|
- gsize i, session_type_index = 0, number_of_session_types = 0;
|
|
+ gsize i, session_type_index = 0;
|
|
g_autofree gchar *preferred_display_server = NULL;
|
|
|
|
preferred_display_server = get_preferred_display_server (factory);
|
|
|
|
if (g_strcmp0 (preferred_display_server, "wayland") != 0 &&
|
|
g_strcmp0 (preferred_display_server, "xorg") != 0)
|
|
return NULL;
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (session_types) - 1; i++) {
|
|
#ifdef ENABLE_WAYLAND_SUPPORT
|
|
- if (number_of_session_types > 0 ||
|
|
+ if (i > 0 ||
|
|
g_strcmp0 (preferred_display_server, "wayland") == 0) {
|
|
gboolean wayland_enabled = FALSE;
|
|
if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) {
|
|
- if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) )
|
|
- session_types[number_of_session_types++] = "wayland";
|
|
+ if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE)) {
|
|
+ session_types[i] = "wayland"; continue;
|
|
+ }
|
|
}
|
|
}
|
|
#endif
|
|
|
|
- if (number_of_session_types > 0 ||
|
|
+ if (i > 0 ||
|
|
g_strcmp0 (preferred_display_server, "xorg") == 0) {
|
|
gboolean xorg_enabled = FALSE;
|
|
if (gdm_settings_direct_get_boolean (GDM_KEY_XORG_ENABLE, &xorg_enabled)) {
|
|
- if (xorg_enabled && g_file_test ("/usr/bin/Xorg", G_FILE_TEST_IS_EXECUTABLE) )
|
|
- session_types[number_of_session_types++] = "x11";
|
|
+ if (xorg_enabled && g_file_test ("/usr/bin/Xorg", G_FILE_TEST_IS_EXECUTABLE)) {
|
|
+ session_types[i] = "x11"; continue;
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
|
|
if (should_fall_back)
|
|
session_type_index++;
|
|
|
|
return session_types[session_type_index];
|
|
}
|
|
|
|
static void
|
|
on_display_disposed (GdmLocalDisplayFactory *factory,
|
|
GdmDisplay *display)
|
|
{
|
|
g_debug ("GdmLocalDisplayFactory: Display %p disposed", display);
|
|
}
|
|
|
|
static void
|
|
store_display (GdmLocalDisplayFactory *factory,
|
|
GdmDisplay *display)
|
|
{
|
|
GdmDisplayStore *store;
|
|
|
|
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
|
|
gdm_display_store_add (store, display);
|
|
}
|
|
|
|
/*
|
|
Example:
|
|
dbus-send --system --dest=org.gnome.DisplayManager \
|
|
--
|
|
2.32.0
|
|
|