git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit629f6601419ad49c14daf3a0057a7bd808ee700f
parente357551da6
authorIsaac Freund <[email protected]>
date2025-12-12 12:09
Xwayland: fix use after free

 river/XwaylandWindow.zig | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/river/XwaylandWindow.zig b/river/XwaylandWindow.zig
index 9415829..aec4ba7 100644
--- a/river/XwaylandWindow.zig
+++ b/river/XwaylandWindow.zig
@@ -232,12 +232,13 @@ fn handleRequestConfigure(
 
 fn handleSetOverrideRedirect(listener: *wl.Listener(void)) void {
     const xwindow: *XwaylandWindow = @fieldParentPtr("set_override_redirect", listener);
+    const xsurface = xwindow.xsurface;
 
     log.debug("xwayland surface set override redirect", .{});
 
-    assert(xwindow.xsurface.override_redirect);
+    assert(xsurface.override_redirect);
 
-    if (xwindow.xsurface.surface) |surface| {
+    if (xsurface.surface) |surface| {
         if (surface.mapped) {
             handleUnmap(&xwindow.unmap);
         }
@@ -245,7 +246,7 @@ fn handleSetOverrideRedirect(listener: *wl.Listener(void)) void {
     }
     handleDestroy(&xwindow.destroy);
 
-    XwaylandOverrideRedirect.create(xwindow.xsurface) catch {
+    XwaylandOverrideRedirect.create(xsurface) catch {
         log.err("out of memory", .{});
         return;
     };