From 6b1b6e97f6d281f767e578ceb84b4bed8caf1f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 29 Jan 2015 16:48:23 +0100 Subject: PanelService: when looking for a panel, verify the entry is still valid before deferencing it (bzr r3899.2.14) --- services/panel-service.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'services') diff --git a/services/panel-service.c b/services/panel-service.c index f473bbb2a..334fed2fe 100644 --- a/services/panel-service.c +++ b/services/panel-service.c @@ -331,6 +331,11 @@ get_entry_at_panel (PanelService *self, const gchar *panel, gint x, gint y) return NULL; } +static gchar * +get_indicator_entry_id_by_entry (IndicatorObjectEntry *entry); +static IndicatorObjectEntry * +get_indicator_entry_by_id (PanelService *self, const gchar *entry_id); + static const gchar* get_panel_for_parent_at (PanelService *self, guint parent, gint x, gint y) { @@ -349,6 +354,14 @@ get_panel_for_parent_at (PanelService *self, guint parent, gint x, gint y) IndicatorObjectEntry *entry = k; GdkRectangle *geo = v; + // The entry might be invalid at this point (as already removed), double check + gchar *entry_id = get_indicator_entry_id_by_entry (entry); + IndicatorObjectEntry *tmp_entry = get_indicator_entry_by_id (self, entry_id); + g_free (entry_id); + + if (entry != tmp_entry) + continue; + if (!parent || entry->parent_window == parent) { if (rect_contains_point (geo, x, y)) -- cgit v1.2.3