dwm

dynamic window manager
git clone git://git.suckless.org/dwm
Log | Files | Refs | README | LICENSE

commit 3fdf0241fcd1b7677a034c0c8f213587e5e706e7
parent 7283c8c0ac9db8b38bb280576668256023d82fb4
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Tue, 13 Oct 2026 14:30:47 +0200

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;
}

Diffstat:
Mdwm.c | 3+++
1 file changed, 3 insertions(+), 0 deletions(-)

diff --git 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;