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);
|
||||
double x, y;
|
||||
|
||||
BUG_WARN(!dev->valuator);
|
||||
BUG_WARN(dev->valuator->numAxes < 2);
|
||||
BUG_WARN(!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;
|
||||
}
|
||||
|
||||
if (valuator_mask_isset(mask, 0))
|
||||
x = valuator_mask_get_double(mask, 0);
|
||||
|
@ -1493,8 +1498,6 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
{
|
||||
CARD32 ms = GetTimeInMillis();
|
||||
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 scroll;
|
||||
int i;
|
||||
|
@ -1519,6 +1522,14 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
{
|
||||
double val, adj;
|
||||
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 */
|
||||
switch (buttons) {
|
||||
|
|
Loading…
Reference in New Issue