From ecd618957ebf01cb4137f98efec3faed35f8a9f5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 22 Jul 2009 15:19:34 +1000 Subject: [PATCH] dix: fix null-pointer dereference on activating enter/focus grabs. EventToXI2 returns a NULL event for enter/focus events since these events aren't yet wrapped into internal events. This is a quickfix only, it works thanks to the alignment of internal and XI2 event types. Eventually, enter/leave events should be wrapped into internal events. Signed-off-by: Peter Hutterer --- dix/events.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dix/events.c b/dix/events.c index 750546315..f50229a91 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3474,7 +3474,16 @@ CheckPassiveGrabsOnWindow( continue; } count = 1; - mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8]; + + /* FIXME: EventToXI2 returns NULL for enter events, so + * dereferencing the event is bad. Internal event types are + * aligned with core events, so the else clause is valid. + * long-term we should use internal events for enter/focus + * as well */ + if (xE) + mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8]; + else if (event->type == XI_Enter || event->type == XI_FocusIn) + mask = grab->xi2mask[device->id][event->type/8]; } else { rc = EventToXI((InternalEvent*)event, &xE, &count);