File lightdm-gtk-greeter-invalid-last_session.patch of Package lightdm-gtk-greeter
Index: lightdm-gtk-greeter-1.3.1/src/lightdm-gtk-greeter.c
===================================================================
--- lightdm-gtk-greeter-1.3.1.orig/src/lightdm-gtk-greeter.c
+++ lightdm-gtk-greeter-1.3.1/src/lightdm-gtk-greeter.c
@@ -77,9 +77,26 @@ set_session (const gchar *session)
last_session = g_key_file_get_value (state, "greeter", "last-session", NULL);
if (last_session && g_strcmp0 (session, last_session) != 0)
{
- set_session (last_session);
- g_free (last_session);
- return;
+ /* Check if last_session is a valid session */
+ const GList *items, *item;
+ items = lightdm_get_sessions ();
+ for (item = items; item; item = item->next)
+ {
+ LightDMSession *session = item->data;
+ gchar *s;
+ gboolean matched;
+ s = lightdm_session_get_key (session);
+ matched = strcmp (s, last_session) == 0;
+ s = NULL;
+ g_free (s);
+ if (matched)
+ {
+ set_session (last_session);
+ g_free (last_session);
+ return;
+ }
+ }
+ g_warning ("Invalid session: %s", last_session);
}
g_free (last_session);
default_session = lightdm_greeter_get_default_session_hint (greeter);