xserver: Branch 'mpx'

Peter Hutterer whot at kemper.freedesktop.org
Thu Nov 15 00:24:04 PST 2007


 Xi/exevents.c |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

New commits:
commit 83926cb8bef6288b89e801c5e60b3f40e923e16e
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Thu Nov 15 17:41:07 2007 +1030

    Xi: Only alloc modifierKeyMap if <slave device>->maxKeysPerModifier > 0
    
    Sometimes (e.g. on my debian ppc box) maxKeysPerModifier of the SD is 0. So we
    try to malloc(0), bringing the whole server down with a FatalError because it
    looks as if the malloc failed. This is bad, so only alloc if we actually have
    something to alloc.

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 837afa3..1cef825 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -147,11 +147,14 @@ CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
     if (master->devPrivates[CoreDevicePrivatesIndex].ptr != device) {
         memcpy(mk->modifierMap, dk->modifierMap, MAP_LENGTH);
 
-        mk->modifierKeyMap = xcalloc(8, dk->maxKeysPerModifier);
-        if (!mk->modifierKeyMap)
-            FatalError("[Xi] no memory for class shift.\n");
-        memcpy(mk->modifierKeyMap, dk->modifierKeyMap,
-                (8 * dk->maxKeysPerModifier));
+        if (dk->maxKeysPerModifier)
+        {
+            mk->modifierKeyMap = xcalloc(8, dk->maxKeysPerModifier);
+            if (!mk->modifierKeyMap)
+                FatalError("[Xi] no memory for class shift.\n");
+            memcpy(mk->modifierKeyMap, dk->modifierKeyMap,
+                    (8 * dk->maxKeysPerModifier));
+        }
 
         mk->maxKeysPerModifier = dk->maxKeysPerModifier;
         mk->curKeySyms.minKeyCode = dk->curKeySyms.minKeyCode;


More information about the xorg-commit mailing list