Don't bother sanitizing disabled event codes
authorPeter Hutterer <peter.hutterer@who-t.net>
Wed, 17 Aug 2016 00:48:43 +0000 (10:48 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 17 Aug 2016 07:43:32 +0000 (17:43 +1000)
Filter them immediately instead of passing them on and relying on the actual
event handling code to filter them.

Reproducer: if EV_ABS is disabled on an Apple MagicMouse we still get events
passed into sanitize_event(). But the code handling EV_ABS events doesn't
update the state, so we end up complaining about double tracking IDs, even
though that is not actually correct.

https://bugzilla.redhat.com/show_bug.cgi?id=1361325

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
libevdev/libevdev.c

index 48b49b1..43a095c 100644 (file)
@@ -979,6 +979,9 @@ sanitize_event(const struct libevdev *dev,
               struct input_event *ev,
               enum SyncState sync_state)
 {
+       if (!libevdev_has_event_code(dev, ev->type, ev->code))
+               return EVENT_FILTER_DISCARD;
+
        if (unlikely(dev->num_slots > -1 &&
                     libevdev_event_is_code(ev, EV_ABS, ABS_MT_SLOT) &&
                     (ev->value < 0 || ev->value >= dev->num_slots))) {