xserver: Branch 'master' - 3 commits

Peter Hutterer whot at kemper.freedesktop.org
Thu Mar 26 18:37:12 PDT 2009


 Xext/xtest.c     |   14 +++++++++++---
 dix/devices.c    |    2 +-
 dix/inpututils.c |    3 +++
 3 files changed, 15 insertions(+), 4 deletions(-)

New commits:
commit e3c1096273446bb7eb993b179ceb989617d149cc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Mar 23 13:20:22 2009 +1000

    dix: build_modmap_from_modkeymap needs to bounds-check its argument.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/dix/inpututils.c b/dix/inpututils.c
index 2226d55..c630088 100644
--- a/dix/inpututils.c
+++ b/dix/inpututils.c
@@ -235,6 +235,9 @@ static int build_modmap_from_modkeymap(CARD8 *modmap, KeyCode *modkeymap,
         if (!modkeymap[i])
             continue;
 
+        if (modkeymap[i] >= MAP_LENGTH)
+            return BadValue;
+
         if (modmap[modkeymap[i]])
             return BadValue;
 
commit 45baef0b77f6f0e5e6230eca045dfcbb1e48c647
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Mar 23 13:32:32 2009 +1000

    dix: return BadValue as error in SetModifierMapping.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/dix/devices.c b/dix/devices.c
index 3388dac..065b202 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1422,7 +1422,7 @@ ProcSetModifierMapping(ClientPtr client)
     rc = change_modmap(client, PickKeyboard(client), (KeyCode *)&stuff[1],
                        stuff->numKeyPerModifier);
     if (rc == MappingFailed || rc == -1)
-        rc = BadValue;
+        return BadValue;
     if (rc != Success && rc != MappingSuccess && rc != MappingFailed &&
         rc != MappingBusy)
 	return rc;
commit 603db34337a61754e0c5f71525011d10eab78411
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Mar 25 15:51:43 2009 +1000

    Xext: set POINTER_SCREEN flag in XTestFakeInput if necessary. (RH #490984)
    
    The POINTER_SCREEN flag must be set explicitly for XTest core events to avoid
    out-of-range events when the lastSlave was an SD with an explicit axis range.
    Device events sent through XTest don't need this flag, they are expected to be
    in the valuator range of the device anyway.
    
    Red Hat Bug 490984 <https://bugzilla.redhat.com/show_bug.cgi?id=490984>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index fe3816e..ab88231 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -159,6 +159,7 @@ ProcXTestFakeInput(ClientPtr client)
     int nevents = 0;
     int i;
     int base = 0;
+    int flags = 0;
 
     nev = (stuff->length << 2) - sizeof(xReq);
     if ((nev % sizeof(xEvent)) || !nev)
@@ -209,8 +210,14 @@ ProcXTestFakeInput(ClientPtr client)
                 client->errorValue = ev->u.u.type;
                 return BadValue;
             }
+
+            if (ev->u.u.detail == xFalse)
+                flags |= POINTER_ABSOLUTE;
         } else
+        {
             firstValuator = 0;
+            flags |= POINTER_ABSOLUTE;
+        }
 
         if (nev > 1 && !dev->valuator)
         {
@@ -279,6 +286,8 @@ ProcXTestFakeInput(ClientPtr client)
                 valuators[1] = ev->u.keyButtonPointer.rootY;
                 numValuators = 2;
                 firstValuator = 0;
+                if (ev->u.u.detail == xFalse)
+                    flags = POINTER_ABSOLUTE | POINTER_SCREEN;
                 break;
             default:
                 client->errorValue = ev->u.u.type;
@@ -376,14 +385,13 @@ ProcXTestFakeInput(ClientPtr client)
     GetEventList(&events);
     switch(type) {
         case MotionNotify:
-            nevents = GetPointerEvents(events, dev, type, 0,
-                            (ev->u.u.detail == xFalse) ?  POINTER_ABSOLUTE : 0,
+            nevents = GetPointerEvents(events, dev, type, 0, flags,
                             firstValuator, numValuators, valuators);
             break;
         case ButtonPress:
         case ButtonRelease:
             nevents = GetPointerEvents(events, dev, type, ev->u.u.detail,
-                                       POINTER_ABSOLUTE, firstValuator,
+                                       flags, firstValuator,
                                        numValuators, valuators);
             break;
         case KeyPress:


More information about the xorg-commit mailing list