dix: avoid NULL-pointer dereference on button-only devices (#38313)
And for such devices simply take the last.valuators[] which must be valid at all times anyway. UpdateSlaveDeviceCoords takes care of that. X.Org Bug 38313 <http://bugs.freedesktop.org/show_bug.cgi?id=38313> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
parent
38000e7d1f
commit
2416ee4a01
|
@ -840,10 +840,15 @@ scale_to_desktop(DeviceIntPtr dev, ValuatorMask *mask,
|
||||||
ScreenPtr scr = miPointerGetScreen(dev);
|
ScreenPtr scr = miPointerGetScreen(dev);
|
||||||
double x, y;
|
double x, y;
|
||||||
|
|
||||||
BUG_WARN(!dev->valuator);
|
BUG_WARN(!dev->valuator || dev->valuator->numAxes < 2);
|
||||||
BUG_WARN(dev->valuator->numAxes < 2);
|
|
||||||
if (!dev->valuator || dev->valuator->numAxes < 2)
|
if (!dev->valuator || dev->valuator->numAxes < 2)
|
||||||
|
{
|
||||||
|
/* if we have no axes, last.valuators must be in screen coords
|
||||||
|
* anyway */
|
||||||
|
*devx = *screenx = dev->last.valuators[0];
|
||||||
|
*devy = *screeny = dev->last.valuators[1];
|
||||||
return scr;
|
return scr;
|
||||||
|
}
|
||||||
|
|
||||||
if (valuator_mask_isset(mask, 0))
|
if (valuator_mask_isset(mask, 0))
|
||||||
x = valuator_mask_get_double(mask, 0);
|
x = valuator_mask_get_double(mask, 0);
|
||||||
|
@ -1493,8 +1498,6 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
||||||
{
|
{
|
||||||
CARD32 ms = GetTimeInMillis();
|
CARD32 ms = GetTimeInMillis();
|
||||||
int num_events = 0, nev_tmp;
|
int num_events = 0, nev_tmp;
|
||||||
int h_scroll_axis = pDev->valuator->h_scroll_axis;
|
|
||||||
int v_scroll_axis = pDev->valuator->v_scroll_axis;
|
|
||||||
ValuatorMask mask;
|
ValuatorMask mask;
|
||||||
ValuatorMask scroll;
|
ValuatorMask scroll;
|
||||||
int i;
|
int i;
|
||||||
|
@ -1519,6 +1522,14 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
||||||
{
|
{
|
||||||
double val, adj;
|
double val, adj;
|
||||||
int axis;
|
int axis;
|
||||||
|
int h_scroll_axis = -1;
|
||||||
|
int v_scroll_axis = -1;
|
||||||
|
|
||||||
|
if (pDev->valuator)
|
||||||
|
{
|
||||||
|
h_scroll_axis = pDev->valuator->h_scroll_axis;
|
||||||
|
v_scroll_axis = pDev->valuator->v_scroll_axis;
|
||||||
|
}
|
||||||
|
|
||||||
/* Up is negative on valuators, down positive */
|
/* Up is negative on valuators, down positive */
|
||||||
switch (buttons) {
|
switch (buttons) {
|
||||||
|
|
Loading…
Reference in New Issue