From e2a284608535755699d8a15807ea15315b55af5e Mon Sep 17 00:00:00 2001 From: Derek Upham Date: Thu, 21 May 2009 00:15:28 -0700 Subject: [PATCH] evdev: Prevent driver from processing motion events that it has not configured. #21832 The current implementation initializes itself to support relative motion events, or absolute motion events, or neither. But the event-handling code attempts to process all events, no matter what the initialization was. This patch reproduces the flag tests found during init, to skip events that the driver doesn't support. Signed-off-by: Derek Upham Signed-off-by: Julien Cristau --- src/evdev.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/evdev.c b/src/evdev.c index 7d30a64..c9b9fe1 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -363,6 +363,10 @@ EvdevProcessEvent(InputInfoPtr pInfo, struct input_event *ev) switch (ev->type) { case EV_REL: + /* Ignore EV_REL events if we never set up for them. */ + if (!(pEvdev->flags & EVDEV_RELATIVE_EVENTS)) + break; + /* Handle mouse wheel emulation */ if (EvdevWheelEmuFilterMotion(pInfo, ev)) break; @@ -393,6 +397,10 @@ EvdevProcessEvent(InputInfoPtr pInfo, struct input_event *ev) break; case EV_ABS: + /* Ignore EV_ABS events if we never set up for them. */ + if (!(pEvdev->flags & EVDEV_ABSOLUTE_EVENTS)) + break; + if (ev->code > ABS_MAX) break; pEvdev->vals[pEvdev->axis_map[ev->code]] = value; @@ -1199,9 +1207,10 @@ EvdevInit(DeviceIntPtr device) FIXME: somebody volunteer to fix this. */ - if (pEvdev->flags & EVDEV_RELATIVE_EVENTS) + if (pEvdev->flags & EVDEV_RELATIVE_EVENTS) { EvdevAddRelClass(device); - else if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS) + pEvdev->flags &= ~EVDEV_ABSOLUTE_EVENTS; + } else if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS) EvdevAddAbsClass(device); #ifdef HAVE_PROPERTIES -- 1.6.3.1