From a40348a976fd32bd1861fe51edabc749b3d1f336 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 10 May 2023 15:51:16 +0000 Subject: cairo: Fix crash on destroy when globals could not be obtained Gamescope does not advertise subcompositor so when this plugin is initialized, it fails and then attempts to destroy a NULL subcompositor which segfaults in wl_proxy code. --- src/plugins/cairo/libdecor-cairo.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/cairo/libdecor-cairo.c b/src/plugins/cairo/libdecor-cairo.c index 6113066..8d2ef14 100644 --- a/src/plugins/cairo/libdecor-cairo.c +++ b/src/plugins/cairo/libdecor-cairo.c @@ -398,12 +398,15 @@ libdecor_plugin_cairo_destroy(struct libdecor_plugin *plugin) free(plugin_cairo->cursor_theme_name); - wl_shm_destroy(plugin_cairo->wl_shm); + if (plugin_cairo->wl_shm) + wl_shm_destroy(plugin_cairo->wl_shm); pango_font_description_free(plugin_cairo->font); - wl_compositor_destroy(plugin_cairo->wl_compositor); - wl_subcompositor_destroy(plugin_cairo->wl_subcompositor); + if (plugin_cairo->wl_compositor) + wl_compositor_destroy(plugin_cairo->wl_compositor); + if (plugin_cairo->wl_subcompositor) + wl_subcompositor_destroy(plugin_cairo->wl_subcompositor); libdecor_plugin_release(&plugin_cairo->plugin); free(plugin_cairo); -- cgit v1.2.3