summaryrefslogtreecommitdiff
path: root/Xext/xtest.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-02-16 15:11:40 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-03-22 11:33:20 +1000
commit6b6afd3d013e3f4910fae3520d1d786df2b0e47a (patch)
tree87fde430736e7cd567cd077db9b6fb62cbdbae9d /Xext/xtest.c
parent9e017cf0cf1f0c9d0d9c2cfeb82ea5dc0eb5905e (diff)
Xext: return BadAccess if PickPointer fails (#45796)
PickPointer or PickKeyboard return NULL, all MDs are currently disabled and we cannot emulate a core event. This wasn't anticipated by the protocol, so we don't really have an error code we may use here - BadAccess is simply the least bad of the possible ones. And returning BadAccess beats crashing the server. X.Org Bug 45796 <http://bugs.freedesktop.org/show_bug.cgi?id=45796> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'Xext/xtest.c')
-rw-r--r--Xext/xtest.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/Xext/xtest.c b/Xext/xtest.c
index 241445759..e659b4154 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -118,6 +118,10 @@ ProcXTestCompareCursor(ClientPtr client)
rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
if (rc != Success)
return rc;
+
+ if (!ptr)
+ return BadAccess;
+
if (stuff->cursor == None)
pCursor = NullCursor;
else if (stuff->cursor == XTestCurrentCursor)
@@ -307,9 +311,15 @@ ProcXTestFakeInput(ClientPtr client)
return BadValue;
}
+ /* Technically the protocol doesn't allow for BadAccess here but
+ * this can only happen when all MDs are disabled. */
+ if (!dev)
+ return BadAccess;
+
dev = GetXTestDevice(dev);
}
+
/* If the event has a time set, wait for it to pass */
if (ev->u.keyButtonPointer.time) {
TimeStamp activateTime;