mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-06 22:00:21 +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> |
||
|---|---|---|
| .. | ||
| 50-litest.conf | ||
| build-cxx.cc | ||
| build-pedantic.c | ||
| device.c | ||
| keyboard.c | ||
| litest-alps-semi-mt.c | ||
| litest-bcm5974.c | ||
| litest-generic-singletouch.c | ||
| litest-int.h | ||
| litest-keyboard.c | ||
| litest-mouse.c | ||
| litest-ms-surface-cover.c | ||
| litest-qemu-usb-tablet.c | ||
| litest-synaptics-hover.c | ||
| litest-synaptics-st.c | ||
| litest-synaptics-t440.c | ||
| litest-synaptics-x1-carbon-3rd.c | ||
| litest-synaptics.c | ||
| litest-trackpoint.c | ||
| litest-vmware-virtual-usb-mouse.c | ||
| litest-wacom-touch.c | ||
| litest-xen-virtual-pointer.c | ||
| litest.c | ||
| litest.h | ||
| log.c | ||
| Makefile.am | ||
| misc.c | ||
| path.c | ||
| pointer.c | ||
| touch.c | ||
| touchpad.c | ||
| trackpoint.c | ||
| udev.c | ||
| valgrind.suppressions | ||