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);
openSUSE Build Service is sponsored by