mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-27 11:30:06 +01:00
When using libinput with xf86-input-libinput, the device speed is represented as a float passed via X properties. If a buggy client gives a broken value, the conversions that occur can cause the value of speed to be NaN (not a number), aka infinity. In C, any comparison with NaN always gives false, whatever the value. So that test in libinput_device_config_accel_set_speed(): (speed < 1.0 || speed > 1.0) will necessarily return FALSE, defeating the test of range. However, since since any comparison with NaN is false, the opposite assert() in accelerator_set_speed(): (speed >= 1.0 && speed <= 1.0) will be false as well, thus triggering the abort() and the crash of the entire X server along with it. The solution is to use the same construct in both routines, so that it fails gracefully in libinput_device_config_accel_set_speed(). Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> |
||
|---|---|---|
| .. | ||
| evdev-mt-touchpad-buttons.c | ||
| evdev-mt-touchpad-edge-scroll.c | ||
| evdev-mt-touchpad-tap.c | ||
| evdev-mt-touchpad.c | ||
| evdev-mt-touchpad.h | ||
| evdev.c | ||
| evdev.h | ||
| filter-private.h | ||
| filter.c | ||
| filter.h | ||
| libinput-private.h | ||
| libinput-util.c | ||
| libinput-util.h | ||
| libinput-version.h.in | ||
| libinput.c | ||
| libinput.h | ||
| libinput.pc.in | ||
| libinput.sym | ||
| Makefile.am | ||
| path.c | ||
| path.h | ||
| timer.c | ||
| timer.h | ||
| udev-seat.c | ||
| udev-seat.h | ||