From 657842093c63066d91b8f79210a4fec692be9f53 Mon Sep 17 00:00:00 2001 From: Jason Gerecke Date: Wed, 10 Apr 2019 12:41:40 -0700 Subject: [PATCH] test: abort when no default value is available for an axis And fix the cases where the default value isn't filled in correctly Issue found because of the following ubsan error: ../src/evdev-tablet.c:182:19: runtime error: signed integer overflow: 0 - -214783648 cannot be represented in type 'int' Signed-off-by: Peter Hutterer --- test/litest-device-wacom-bamboo-16fg-pen.c | 3 +++ test/litest-device-wacom-bamboo-2fg-pen.c | 3 +++ test/litest-device-wacom-cintiq-pro-16-pen.c | 1 + test/litest.c | 22 ++++++++++++++++---- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/test/litest-device-wacom-bamboo-16fg-pen.c b/test/litest-device-wacom-bamboo-16fg-pen.c index 808ccc48..2427fc72 100644 --- a/test/litest-device-wacom-bamboo-16fg-pen.c +++ b/test/litest-device-wacom-bamboo-16fg-pen.c @@ -58,6 +58,9 @@ static int get_axis_default(struct litest_device *d, unsigned int evcode, int32_t *value) { switch (evcode) { + case ABS_DISTANCE: + *value = 0; + return 0; case ABS_PRESSURE: *value = 100; return 0; diff --git a/test/litest-device-wacom-bamboo-2fg-pen.c b/test/litest-device-wacom-bamboo-2fg-pen.c index 51e9ecd3..54bf9429 100644 --- a/test/litest-device-wacom-bamboo-2fg-pen.c +++ b/test/litest-device-wacom-bamboo-2fg-pen.c @@ -58,6 +58,9 @@ static int get_axis_default(struct litest_device *d, unsigned int evcode, int32_t *value) { switch (evcode) { + case ABS_DISTANCE: + *value = 0; + return 0; case ABS_PRESSURE: *value = 100; return 0; diff --git a/test/litest-device-wacom-cintiq-pro-16-pen.c b/test/litest-device-wacom-cintiq-pro-16-pen.c index 8d399af5..da302e65 100644 --- a/test/litest-device-wacom-cintiq-pro-16-pen.c +++ b/test/litest-device-wacom-cintiq-pro-16-pen.c @@ -75,6 +75,7 @@ static int get_axis_default(struct litest_device *d, unsigned int evcode, int32_t *value) { switch (evcode) { + case ABS_Z: case ABS_TILT_X: case ABS_TILT_Y: *value = 0; diff --git a/test/litest.c b/test/litest.c index 918fe6cb..d8a239df 100644 --- a/test/litest.c +++ b/test/litest.c @@ -1776,8 +1776,16 @@ litest_auto_assign_value(struct litest_device *d, break; default: if (!axis_replacement_value(d, axes, ev->code, &value) && - d->interface->get_axis_default) - d->interface->get_axis_default(d, ev->code, &value); + d->interface->get_axis_default) { + int error = d->interface->get_axis_default(d, + ev->code, + &value); + if (error) { + litest_abort_msg("Failed to get default axis value for %s (%d)\n", + libevdev_event_code_get_name(EV_ABS, ev->code), + ev->code); + } + } break; } @@ -2152,8 +2160,14 @@ auto_assign_tablet_value(struct litest_device *d, break; default: if (!axis_replacement_value(d, axes, ev->code, &value) && - d->interface->get_axis_default) - d->interface->get_axis_default(d, ev->code, &value); + d->interface->get_axis_default) { + int error = d->interface->get_axis_default(d, ev->code, &value); + if (error) { + litest_abort_msg("Failed to get default axis value for %s (%d)\n", + libevdev_event_code_get_name(EV_ABS, ev->code), + ev->code); + } + } break; }