From 67c8bcefafbed8d0f122bb91b6d253919727b60e Mon Sep 17 00:00:00 2001 From: bakkeby Date: Mon, 23 Aug 2021 09:47:29 +0200 Subject: [PATCH] Adding zero depth safeguard patch --- dwm/dwm-zero_depth_safeguard-6.2.diff | 86 +++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 dwm/dwm-zero_depth_safeguard-6.2.diff diff --git a/dwm/dwm-zero_depth_safeguard-6.2.diff b/dwm/dwm-zero_depth_safeguard-6.2.diff new file mode 100644 index 0000000..fe84f96 --- /dev/null +++ b/dwm/dwm-zero_depth_safeguard-6.2.diff @@ -0,0 +1,86 @@ +From b96acc617397db2b2aee3a4f8ad14d61eabe335a Mon Sep 17 00:00:00 2001 +From: bakkeby +Date: Mon, 23 Aug 2021 09:17:18 +0200 +Subject: [PATCH] Zero depth safeguard for dwm + +The colour depth attribute of an X window represents the number of bits +that are used to represent the colour. + +A window that has a depth of 0 suggests that it does not support colours +and is therefore not intended to be displayed. + +Mapping a window that has a depth of 0 will result in dwm crashing and +this safeguard will avoid that. + +An example of this would be one of the hidden windows that the firefox +browser manages. + +$ xdotool search firefox +Defaulting to search window name, class, classname, and role +77594627 +77594625 +77594681 +77594684 + +Two of the windows listed above should have a depth of 0, this can be +checked using xwininfo like this: + +$ xwininfo -id 77594625 + +xwininfo: Window id: 0x4a00001 "Firefox" + + Absolute upper-left X: 10 + Absolute upper-left Y: 10 + Relative upper-left X: 10 + Relative upper-left Y: 10 + Width: 10 + Height: 10 + Depth: 0 + Visual: 0x506 + Visual Class: TrueColor + Border width: 0 + Class: InputOnly + Colormap: 0x0 (not installed) + Bit Gravity State: ForgetGravity + Window Gravity State: NorthWestGravity + Backing Store State: NotUseful + Save Under State: no + Map State: IsUnMapped + Override Redirect State: no + Corners: +10+10 -6180+10 -6180-1900 +10-1900 + -geometry 10x10+10+10 + +The window can then be explicitly mapped using xdotool. + +$ xdotool windowmap 77594625 + +Without the safeguard dwm should crash following the above command. + +It should be noted that these kind of windows are not intended to +be explicitly mapped like this and they won't be under normal +circumstances. + +If you are trying to write a script that uses tools like mapw or +xdotool to map and unmap windows then you may want to add some +checks to avoid that you don't include windows that have a depth +of 0. +--- + dwm.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/dwm.c b/dwm.c +index 4465af1..0c064bd 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -1094,6 +1094,8 @@ maprequest(XEvent *e) + + if (!XGetWindowAttributes(dpy, ev->window, &wa)) + return; ++ if (!wa.depth) ++ return; + if (wa.override_redirect) + return; + if (!wintoclient(ev->window)) +-- +2.19.1 +