diff options
author | Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> | 2015-04-15 13:39:18 +0200 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2015-04-16 09:51:56 -0400 |
commit | fae288e364970678a3cde0b8ca37bd67fc2bf764 (patch) | |
tree | e5421b063f990a862354ec5939e9ac9f78c3ba22 | |
parent | d6f1337bed73cf34c95fcafe8789b2a4f2f85d19 (diff) | |
download | gdm-fae288e364970678a3cde0b8ca37bd67fc2bf764.tar.gz |
manager: Don't double-free x11_display_name
x11_display_name got freed twice here; once by g_variant_iter_loop
and once by g_clear_pointer.
Also break out of the loop early and use a non-copying format to
avoid having to free anything.
https://bugzilla.gnome.org/show_bug.cgi?id=747310
-rw-r--r-- | daemon/gdm-manager.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index fc357d3b..64f11dd6 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -1178,9 +1178,11 @@ gdm_manager_handle_register_display (GdmDBusManager *manager, } g_variant_iter_init (&iter, details); - while (g_variant_iter_loop (&iter, "{ss}", &key, &value)) { - if (g_strcmp0 (key, "x11-display-name") == 0) - x11_display_name = value; + while (g_variant_iter_loop (&iter, "{&s&s}", &key, &value)) { + if (g_strcmp0 (key, "x11-display-name") == 0) { + x11_display_name = g_strdup (value); + break; + } } session = get_user_session_for_display (self, display); |