mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-09 14:18:11 +02:00
Xi: Fix XIPassiveGrab handling of keycodes > 255
This was fixed in commit51eb63b0eebut woefully badly. Instead of returning XIAlreadyGrabbed via the Reply, it simply returned the value from the request handler - causing the server to interpret it as BadRequest. Fix it and do what we intended to do instead. Fixes:51eb63b0ee("Xi: disallow passive grabs with a detail > 255") Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2186>
This commit is contained in:
parent
3e872c90c7
commit
53252ad8a9
1 changed files with 9 additions and 6 deletions
|
|
@ -137,12 +137,6 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
|||
return BadValue;
|
||||
}
|
||||
|
||||
/* XI2 allows 32-bit keycodes but thanks to XKB we can never
|
||||
* implement this. Just return an error for all keycodes that
|
||||
* cannot work anyway, same for buttons > 255. */
|
||||
if (stuff->detail > 255)
|
||||
return XIAlreadyGrabbed;
|
||||
|
||||
if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
|
||||
stuff->mask_len * 4) != Success)
|
||||
return BadValue;
|
||||
|
|
@ -202,6 +196,14 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
|||
for (i = 0; i < stuff->num_modifiers; i++, modifiers++) {
|
||||
uint8_t status = Success;
|
||||
|
||||
/* XI2 allows 32-bit keycodes but thanks to XKB we can never
|
||||
* implement this. Pretend that all keycodes above 255 are
|
||||
* already grabbed, same for buttons > 255. */
|
||||
if (stuff->detail > 255) {
|
||||
status = XIAlreadyGrabbed;
|
||||
goto modifier_done;
|
||||
}
|
||||
|
||||
param.modifiers = *modifiers;
|
||||
ret = CheckGrabValues(client, ¶m);
|
||||
if (ret != Success)
|
||||
|
|
@ -234,6 +236,7 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
|||
break;
|
||||
}
|
||||
|
||||
modifier_done:
|
||||
if (status != GrabSuccess) {
|
||||
xXIGrabModifierInfo *info = modifiers_failed + rep.num_modifiers;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue