From 6b6afd3d013e3f4910fae3520d1d786df2b0e47a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 16 Feb 2012 15:11:40 +1000 Subject: [PATCH] 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 Signed-off-by: Peter Hutterer --- Xext/xtest.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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;