xserver: Branch 'server-1.11-branch'

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Thu Apr 19 14:01:07 PDT 2012


 dix/getevents.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

New commits:
commit 240cd0675b019f90bec481a17f3bf8ea99efe972
Author: Michal Suchanek <hramrach at gmail.com>
Date:   Wed Feb 29 14:43:16 2012 +0100

    Avoid crash on button events on device without valuators.
    
    Backport of 2416ee4a015068359807a10f433e8c54192c78a9.
    
    Signed-off-by: Michal Suchanek <hramrach at gmail.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index 058fa8a..bd8fd22 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -198,9 +198,11 @@ set_valuators(DeviceIntPtr dev, DeviceEvent* event, ValuatorMask *mask)
 {
     int i;
 
+    if (!dev->valuator)
+        return;
     /* Set the data to the previous value for unset absolute axes. The values
      * may be used when sent as part of an XI 1.x valuator event. */
-    for (i = 0; i < valuator_mask_size(mask); i++)
+    for (i = 0; (i < valuator_mask_size(mask)) && (i < dev->valuator->numAxes); i++)
     {
         if (valuator_mask_isset(mask, i))
         {
@@ -640,7 +642,7 @@ clipAxis(DeviceIntPtr pDev, int axisNum, int *val)
 {
     AxisInfoPtr axis;
 
-    if (axisNum >= pDev->valuator->numAxes)
+    if (!pDev->valuator || axisNum >= pDev->valuator->numAxes)
         return;
 
     axis = pDev->valuator->axes + axisNum;
@@ -1185,7 +1187,8 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
 
     if (flags & POINTER_ABSOLUTE)
     {
-        if (flags & POINTER_SCREEN) /* valuators are in screen coords */
+        if ((flags & POINTER_SCREEN) && /* valuators are in screen coords */
+             pDev->valuator && (pDev->valuator->numAxes >= 2))
         {
             int scaled;
 


More information about the xorg-commit mailing list