evdev: prevent unterminated device name
[platform/upstream/libinput.git] / src / evdev.c
index e9fd809..27296f8 100644 (file)
@@ -454,7 +454,11 @@ evdev_handle_device(struct evdev_device *device)
                        device->abs.max_y = absinfo.maximum;
                        device->caps |= EVDEV_MOTION_ABS;
                }
-               if (TEST_BIT(abs_bits, ABS_MT_SLOT)) {
+                /* We only handle the slotted Protocol B in weston.
+                   Devices with ABS_MT_POSITION_* but not ABS_MT_SLOT
+                   require mtdev for conversion. */
+               if (TEST_BIT(abs_bits, ABS_MT_POSITION_X) &&
+                   TEST_BIT(abs_bits, ABS_MT_POSITION_Y)) {
                        ioctl(device->fd, EVIOCGABS(ABS_MT_POSITION_X),
                              &absinfo);
                        device->abs.min_x = absinfo.minimum;
@@ -571,6 +575,7 @@ evdev_device_create(struct weston_seat *seat, const char *path, int device_fd)
        device->fd = device_fd;
 
        ioctl(device->fd, EVIOCGNAME(sizeof(devname)), devname);
+       devname[sizeof(devname) - 1] = '\0';
        device->devname = strdup(devname);
 
        if (!evdev_handle_device(device)) {