summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Alexander Steffens (heftig) <jan.steffens@gmail.com>2015-04-15 13:39:18 +0200
committerRay Strode <rstrode@redhat.com>2015-04-16 09:51:56 -0400
commitfae288e364970678a3cde0b8ca37bd67fc2bf764 (patch)
treee5421b063f990a862354ec5939e9ac9f78c3ba22
parentd6f1337bed73cf34c95fcafe8789b2a4f2f85d19 (diff)
downloadgdm-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.c8
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);