Compare commits
28 Commits
master
...
submit/cle
Author | SHA1 | Date | |
---|---|---|---|
|
4d134256b4 | ||
|
e75ac0114b | ||
|
dcefd2156f | ||
|
5f667c59b4 | ||
|
228fade03c | ||
|
bfd5ca197b | ||
|
8a21666344 | ||
|
bfd2a84e17 | ||
|
669019513b | ||
|
c2c09f15dc | ||
|
5d2679f41a | ||
|
b3a47dcbc4 | ||
|
dff3e38a67 | ||
|
d9d03c6241 | ||
|
9c5ae33f0d | ||
|
702e5a19db | ||
|
84a91a4cd3 | ||
|
8b9beb6e5f | ||
|
5980d96ee0 | ||
|
4140099d0f | ||
|
155d8314a8 | ||
|
f80c061f98 | ||
|
a3f5706242 | ||
|
3e3c514f23 | ||
|
1faf2b182e | ||
|
270d340d2a | ||
|
e1bad7ee58 | ||
|
d422be4161 |
|
@ -67,10 +67,10 @@ SProcXkbSelectEvents(ClientPtr client)
|
||||||
CARD16 *c16;
|
CARD16 *c16;
|
||||||
CARD32 *c32;
|
CARD32 *c32;
|
||||||
} from;
|
} from;
|
||||||
register unsigned bit, ndx, maskLeft, dataLeft, size;
|
register unsigned bit, ndx, maskLeft, dataLeft;
|
||||||
|
|
||||||
from.c8 = (CARD8 *) &stuff[1];
|
from.c8 = (CARD8 *) &stuff[1];
|
||||||
dataLeft = (client->req_len * 4) - SIZEOF(xkbSelectEventsReq);
|
dataLeft = (client->req_len * 4) - sizeof(xkbSelectEventsReq);
|
||||||
maskLeft = (stuff->affectWhich & (~XkbMapNotifyMask));
|
maskLeft = (stuff->affectWhich & (~XkbMapNotifyMask));
|
||||||
for (ndx = 0, bit = 1; (maskLeft != 0); ndx++, bit <<= 1) {
|
for (ndx = 0, bit = 1; (maskLeft != 0); ndx++, bit <<= 1) {
|
||||||
if (((bit & maskLeft) == 0) || (ndx == XkbMapNotify))
|
if (((bit & maskLeft) == 0) || (ndx == XkbMapNotify))
|
||||||
|
@ -79,42 +79,43 @@ SProcXkbSelectEvents(ClientPtr client)
|
||||||
if ((stuff->selectAll & bit) || (stuff->clear & bit))
|
if ((stuff->selectAll & bit) || (stuff->clear & bit))
|
||||||
continue;
|
continue;
|
||||||
switch (ndx) {
|
switch (ndx) {
|
||||||
|
// CARD16
|
||||||
case XkbNewKeyboardNotify:
|
case XkbNewKeyboardNotify:
|
||||||
case XkbStateNotify:
|
case XkbStateNotify:
|
||||||
case XkbNamesNotify:
|
case XkbNamesNotify:
|
||||||
case XkbAccessXNotify:
|
case XkbAccessXNotify:
|
||||||
case XkbExtensionDeviceNotify:
|
case XkbExtensionDeviceNotify:
|
||||||
size = 2;
|
if (dataLeft < sizeof(CARD16)*2)
|
||||||
|
return BadLength;
|
||||||
|
swaps(&from.c16[0]);
|
||||||
|
swaps(&from.c16[1]);
|
||||||
|
from.c8 += sizeof(CARD16)*2;
|
||||||
|
dataLeft -= sizeof(CARD16)*2;
|
||||||
break;
|
break;
|
||||||
|
// CARD32
|
||||||
case XkbControlsNotify:
|
case XkbControlsNotify:
|
||||||
case XkbIndicatorStateNotify:
|
case XkbIndicatorStateNotify:
|
||||||
case XkbIndicatorMapNotify:
|
case XkbIndicatorMapNotify:
|
||||||
size = 4;
|
if (dataLeft < sizeof(CARD32)*2)
|
||||||
|
return BadLength;
|
||||||
|
swapl(&from.c32[0]);
|
||||||
|
swapl(&from.c32[1]);
|
||||||
|
from.c8 += sizeof(CARD32)*2;
|
||||||
|
dataLeft -= sizeof(CARD32)*2;
|
||||||
break;
|
break;
|
||||||
|
// CARD8
|
||||||
case XkbBellNotify:
|
case XkbBellNotify:
|
||||||
case XkbActionMessage:
|
case XkbActionMessage:
|
||||||
case XkbCompatMapNotify:
|
case XkbCompatMapNotify:
|
||||||
size = 1;
|
if (dataLeft < 2)
|
||||||
|
return BadLength;
|
||||||
|
from.c8 += 4;
|
||||||
|
dataLeft -= 4;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
client->errorValue = _XkbErrCode2(0x1, bit);
|
client->errorValue = _XkbErrCode2(0x1, bit);
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
if (dataLeft < (size * 2))
|
|
||||||
return BadLength;
|
|
||||||
if (size == 2) {
|
|
||||||
swaps(&from.c16[0]);
|
|
||||||
swaps(&from.c16[1]);
|
|
||||||
}
|
|
||||||
else if (size == 4) {
|
|
||||||
swapl(&from.c32[0]);
|
|
||||||
swapl(&from.c32[1]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
size = 2;
|
|
||||||
}
|
|
||||||
from.c8 += (size * 2);
|
|
||||||
dataLeft -= (size * 2);
|
|
||||||
}
|
}
|
||||||
if (dataLeft > 2) {
|
if (dataLeft > 2) {
|
||||||
ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",
|
ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",
|
||||||
|
|
Loading…
Reference in New Issue