summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-11-08 15:44:18 +1030
committerPeter Hutterer <peter@cs.unisa.edu.au>2007-11-08 15:44:18 +1030
commit59b304d8a24fecd094296feb217823f0c73d6f82 (patch)
tree2e2f1158a34ba4e34f61bf31b80e73fc75f31caf
parent3063f0c6679bdbea13f360cff8d09a88b9871da9 (diff)
dix, mi: stop segfaults when a floating device emits events.
For pointers: don't try to set master->valuator fields if there is no master. For keyboards: check if device is valid before trying to access the fields in miPointerGetScreen (btw. this disables DGA events for floating keyboards). Also stop the hideous number of ErrorFs if we request the paired device for a floating dev.
-rw-r--r--dix/devices.c5
-rw-r--r--dix/getevents.c7
-rw-r--r--mi/mipointer.c2
3 files changed, 7 insertions, 7 deletions
diff --git a/dix/devices.c b/dix/devices.c
index 30fc7b33d..c9831ea92 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -2265,11 +2265,8 @@ GetPairedDevice(DeviceIntPtr dev)
dev = dev->u.master;
if (!dev->spriteInfo->paired)
- {
- ErrorF("[dix] No device paired with %d (%s).\n",
- dev->id, dev->name);
return NULL;
- }
+
return dev->spriteInfo->paired;
}
diff --git a/dix/getevents.c b/dix/getevents.c
index 30443018c..a23eabea2 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -736,8 +736,11 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
pDev->valuator->lastx = x;
pDev->valuator->lasty = y;
- master->valuator->lastx = x;
- master->valuator->lasty = y;
+ if (master)
+ {
+ master->valuator->lastx = x;
+ master->valuator->lasty = y;
+ }
if (!coreOnly)
{
diff --git a/mi/mipointer.c b/mi/mipointer.c
index 7b565799e..b2f31c1d5 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -529,7 +529,7 @@ miPointerCurrentScreen ()
_X_EXPORT ScreenPtr
miPointerGetScreen(DeviceIntPtr pDev)
{
- if (!pDev->isMaster && !pDev->u.master)
+ if (!pDev || (!pDev->isMaster && !pDev->u.master))
return NULL;
return MIPOINTER(pDev)->pScreen;