Commit 30866b97 authored by Peter Hutterer's avatar Peter Hutterer

eventcomm: prevent possibly division by zero

This came up as a kernel bug, but it's valid to create uinput devices with a
min == max range for x/y. Technically valid, but effectively useless, so catch
it, complain and hobble on along.
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 5378a020
......@@ -436,6 +436,11 @@ event_query_axis_ranges(InputInfoPtr pInfo)
event_get_abs(proto_data->evdev, ABS_Y, &priv->miny, &priv->maxy,
&priv->synpara.hyst_y, &priv->resy);
if (priv->minx == priv->maxx || priv->miny == priv->maxy) {
xf86IDrvMsg(pInfo, X_ERROR, "Kernel bug: min == max on ABS_X/Y\n");
return;
}
priv->has_pressure = libevdev_has_event_code(proto_data->evdev, EV_ABS, ABS_PRESSURE);
priv->has_width = libevdev_has_event_code(proto_data->evdev, EV_ABS, ABS_TOOL_WIDTH);
......@@ -458,6 +463,11 @@ event_query_axis_ranges(InputInfoPtr pInfo)
event_get_abs(proto_data->evdev, ABS_MT_POSITION_Y, &priv->miny,
&priv->maxy, &priv->synpara.hyst_y, &priv->resy);
if (priv->minx == priv->maxx || priv->miny == priv->maxy) {
xf86IDrvMsg(pInfo, X_ERROR, "Kernel bug: min == max on ABS_MT_POSITION_X/Y\n");
return;
}
proto_data->st_to_mt_offset[0] = priv->minx - st_minx;
proto_data->st_to_mt_scale[0] =
(priv->maxx - priv->minx) / (st_maxx - st_minx);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment