x11: Prevent use-after-free if a filter is removed during handling

Keep a pointer to the next element, to protect against filters removing
themselves.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2640
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2868>
This commit is contained in:
Carlos Garnacho 2023-02-24 12:55:30 +01:00
parent bac7b3f4e6
commit 53126bf008

View File

@ -2523,11 +2523,14 @@ meta_x11_display_run_event_funcs (MetaX11Display *x11_display,
XEvent *xevent) XEvent *xevent)
{ {
MetaX11EventFilter *filter; MetaX11EventFilter *filter;
GList *l; GList *next, *l = x11_display->event_funcs;
for (l = x11_display->event_funcs; l; l = l->next) while (l)
{ {
filter = l->data; filter = l->data;
next = l->next;
filter->func (x11_display, xevent, filter->user_data); filter->func (x11_display, xevent, filter->user_data);
l = next;
} }
} }