aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2026-10-13 14:30:47 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2026-10-16 13:25:55 +0200
commit3fdf0241fcd1b7677a034c0c8f213587e5e706e7 (patch)
tree611806cd8e921c2b5c3248b4f23f5181526e5cd9
parent7283c8c0ac9db8b38bb280576668256023d82fb4 (diff)
ignore malformed ConfigureNotify with width or height <= 0
This could crash dwm. cc repro.c -o repro -lX11; ./repro int main(void) { Display *d; int screen; Window root; d = XOpenDisplay(NULL); if (!d) { fprintf(stderr, "XOpenDisplay failed\n"); return 1; } screen = DefaultScreen(d); root = RootWindow(d, screen); XConfigureEvent ce = {0}; ce.type = ConfigureNotify; ce.display = d; ce.event = root; ce.window = root; ce.width = 0; ce.height = 0; XSendEvent(d, root, False, StructureNotifyMask, (XEvent *)&ce); XFlush(d); XCloseDisplay(d); return 0; }
-rw-r--r--dwm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/dwm.c b/dwm.c
index 5ff6fd4..1249997 100644
--- a/dwm.c
+++ b/dwm.c
@@ -559,6 +559,9 @@ configurenotify(XEvent *e)
/* TODO: updategeom handling sucks, needs to be simplified */
if (ev->window == root) {
+ if (ev->width <= 0 || ev->height <= 0)
+ return;
+
dirty = (sw != ev->width || sh != ev->height);
sw = ev->width;
sh = ev->height;