Don't try setting an ABS code without data
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 26 Jul 2013 06:53:04 +0000 (16:53 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 29 Jul 2013 04:05:21 +0000 (14:05 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
libevdev/libevdev.c
test/test-libevdev-has-event.c

index c51770487762ce9b32c717ce30fe8e4c3ce361d1..f83848a4cf48c88aea598f318ac19b97726f6070 100644 (file)
@@ -854,6 +854,8 @@ libevdev_enable_event_code(struct libevdev *dev, unsigned int type,
 
        if (type != EV_ABS && data != NULL)
                return -1;
+       else if (type == EV_ABS && data == NULL)
+               return -1;
 
        if (type == EV_SYN)
                return 0;
index 963952fdd7231328ed7a3df7a581e6ee3ea90758..8a97b62c9e8eb04ca34cc9d8af90f4723f8c3731 100644 (file)
@@ -571,6 +571,8 @@ START_TEST(test_device_enable_bit_invalid)
        ck_assert_int_eq(libevdev_enable_event_code(dev, EV_MAX + 1, ABS_MAX + 1, &abs), -1);
        ck_assert_int_eq(libevdev_enable_event_type(dev, EV_MAX + 1), -1);
 
+       ck_assert_int_eq(libevdev_enable_event_code(dev, EV_ABS, ABS_Y, NULL), -1);
+
        uinput_device_free(uidev);
        libevdev_free(dev);
 }