← Back to team overview

lightdm-gtk-greeter-team team mailing list archive

[Merge] lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/get_session_fix into lp:lightdm-gtk-greeter

 

Andrew P. has proposed merging lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/get_session_fix into lp:lightdm-gtk-greeter.

Requested reviews:
  LightDM Gtk+ Greeter Development Team (lightdm-gtk-greeter-team)
Related bugs:
  Bug #1311933 in LightDM GTK+ Greeter: "New users fail when ~session is not part of show-indicators= in the config."
  https://bugs.launchpad.net/lightdm-gtk-greeter/+bug/1311933

For more details, see:
https://code.launchpad.net/~lightdm-gtk-greeter-team/lightdm-gtk-greeter/get_session_fix/+merge/217356

get_session() returns current_session instead of its copy. Returned value will be freed in start_session() -> current_session becomes corrupted. The same is true for get_language() and current_language.

This patch fix it.
-- 
https://code.launchpad.net/~lightdm-gtk-greeter-team/lightdm-gtk-greeter/get_session_fix/+merge/217356
Your team LightDM Gtk+ Greeter Development Team is requested to review the proposed merge of lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/get_session_fix into lp:lightdm-gtk-greeter.
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c	2014-04-23 10:35:11 +0000
+++ src/lightdm-gtk-greeter.c	2014-04-27 14:25:03 +0000
@@ -521,7 +521,7 @@
 
     /* if the user manually selected a session, use it */
     if (current_session)
-        return current_session;
+        return g_strdup (current_session);
 
     menu_items = gtk_container_get_children(GTK_CONTAINER(session_menu));
     
@@ -549,6 +549,7 @@
 
     if (!gtk_widget_get_visible (session_menuitem))
     {
+        g_free (current_session);
         current_session = g_strdup (session);
         return;
     }
@@ -567,6 +568,7 @@
             if (matched)
             {
                 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_iter->data), TRUE);
+                g_free (current_session);
                 current_session = g_strdup(session);
                 /* Set menuitem-image to session-badge */
 #if GTK_CHECK_VERSION (3, 0, 0)
@@ -626,7 +628,7 @@
 
     /* if the user manually selected a language, use it */
     if (current_language)
-        return current_language;
+        return g_strdup (current_language);
 
     menu_items = gtk_container_get_children(GTK_CONTAINER(language_menu));    
     for (menu_iter = menu_items; menu_iter != NULL; menu_iter = g_list_next(menu_iter))
@@ -648,6 +650,7 @@
 
     if (!gtk_widget_get_visible (language_menuitem))
     {
+        g_free (current_language);
         current_language = g_strdup (language);
         return;
     }
@@ -666,6 +669,7 @@
             if (matched)
             {
                 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_iter->data), TRUE);
+                g_free (current_language);
                 current_language = g_strdup(language);
                 gtk_menu_item_set_label(GTK_MENU_ITEM(language_menuitem),language);
                 return;


References