wayland/surface: Only call destroy func when available

When calling gdk_wayland_surface_export_handle(), if we pass
some 'user_data' but no 'destroy_func', GTK4 crashes. That's
because in xdg_exported_handle() we are unconditionally calling
destroy_func -- even when it's NULL.

Fix that by checking if there's a destroy function before calling
it.

Fixes https://gitlab.gnome.org/GNOME/gtk/issues/2179
This commit is contained in:
Georges Basile Stavracas Neto 2019-10-01 11:54:28 -03:00
parent bcea96528a
commit 655c9dd526

View File

@ -4063,8 +4063,11 @@ xdg_exported_handle (void *data,
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
impl->exported.callback (surface, handle, impl->exported.user_data);
g_clear_pointer (&impl->exported.user_data,
impl->exported.destroy_func);
if (impl->exported.destroy_func)
{
g_clear_pointer (&impl->exported.user_data,
impl->exported.destroy_func);
}
}
static const struct zxdg_exported_v1_listener xdg_exported_listener = {