mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-24 13:40:06 +01:00
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>
(cherry picked from commit 76b3be75b6)
Conflicts:
test/xi2/protocol-xipassivegrabdevice.c
This commit is contained in:
parent
345b7ead1d
commit
f11c5938d7
2 changed files with 9 additions and 2 deletions
|
|
@ -63,7 +63,7 @@ SProcXIPassiveGrabDevice(ClientPtr client)
|
|||
swaps(&stuff->mask_len);
|
||||
swaps(&stuff->num_modifiers);
|
||||
|
||||
mods = (uint32_t *) &stuff[1];
|
||||
mods = (uint32_t *) &stuff[1] + stuff->mask_len;
|
||||
|
||||
for (i = 0; i < stuff->num_modifiers; i++, mods++) {
|
||||
swapl(mods);
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req,
|
|||
{
|
||||
int rc;
|
||||
int modifiers;
|
||||
int mask_len;
|
||||
|
||||
rc = ProcXIPassiveGrabDevice(&client_request);
|
||||
assert(rc == error);
|
||||
|
|
@ -153,10 +154,11 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req,
|
|||
swaps(&req->deviceid);
|
||||
modifiers = req->num_modifiers;
|
||||
swaps(&req->num_modifiers);
|
||||
mask_len = req->mask_len;
|
||||
swaps(&req->mask_len);
|
||||
|
||||
while (modifiers--) {
|
||||
CARD32 *mod = ((CARD32 *) (req + 1)) + modifiers;
|
||||
CARD32 *mod = ((CARD32 *) (req + 1)) + mask_len + 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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue