diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2014-01-24 16:51:02 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2014-01-25 18:54:16 +1000 |
commit | 76b3be75b62657e346731444736f7e4d200beb5b (patch) | |
tree | 5e2d918ff42f7cd6e34438d2c4d046b70e5d456a /test | |
parent | c1ce807d9f18f215332d7eeb844e8c640f71c53c (diff) |
Xi: fix modifier offset in XIPassiveGrab swapping function
The request is followed by mask_len 4-byte units, then followed by the actual
modifiers.
Also fix up the swapping test, which had the same issue.
Reported-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/xi2/protocol-xipassivegrabdevice.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/test/xi2/protocol-xipassivegrabdevice.c b/test/xi2/protocol-xipassivegrabdevice.c index 1e2341eb7..c747ddf03 100644 --- a/test/xi2/protocol-xipassivegrabdevice.c +++ b/test/xi2/protocol-xipassivegrabdevice.c @@ -137,6 +137,7 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req, { int rc; int local_modifiers; + int mask_len; rc = ProcXIPassiveGrabDevice(&client_request); assert(rc == error); @@ -153,10 +154,11 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req, swaps(&req->deviceid); local_modifiers = req->num_modifiers; swaps(&req->num_modifiers); + mask_len = req->mask_len; swaps(&req->mask_len); while (local_modifiers--) { - CARD32 *mod = ((CARD32 *) (req + 1)) + local_modifiers; + CARD32 *mod = (CARD32 *) (req + 1) + mask_len + local_modifiers; swapl(mod); } @@ -228,6 +230,11 @@ test_XIPassiveGrabDevice(void) request->detail = XIAnyButton; request_XIPassiveGrabDevice(&client_request, request, Success, 0); + /* Set a few random masks to make sure we handle modifiers correctly */ + SetBit(mask, XI_ButtonPress); + SetBit(mask, XI_KeyPress); + SetBit(mask, XI_Enter); + /* some modifiers */ request->num_modifiers = N_MODS; request->length += N_MODS; |