diff options
| author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2026-10-13 14:30:47 +0200 |
|---|---|---|
| committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2026-10-16 13:25:55 +0200 |
| commit | 3fdf0241fcd1b7677a034c0c8f213587e5e706e7 (patch) | |
| tree | 611806cd8e921c2b5c3248b4f23f5181526e5cd9 | |
| parent | 7283c8c0ac9db8b38bb280576668256023d82fb4 (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.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -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; |
