diff options
author | Ray Strode <rstrode@redhat.com> | 2021-10-04 14:27:54 -0400 |
---|---|---|
committer | Ray Strode <halfline@gmail.com> | 2021-10-07 14:17:26 +0000 |
commit | 8b7f4d3259e8b7d1eb3d8a83e8852989e869596a (patch) | |
tree | f1c2dc44a8cf3304858c4e94d33848c1b1ce7f5e /xkb | |
parent | 5daf42b48924b1e93d4fe40e600c42ae9835712f (diff) |
xkb: Drop check for XkbSetMapResizeTypes
Commit 446ff2d3177087b8173fa779fa5b77a2a128988b added checks to
prevalidate the size of incoming SetMap requests.
That commit checks for the XkbSetMapResizeTypes flag to be set before
allowing key types data to be processed.
key types data can be changed or even just sent wholesale unchanged
without the number of key types changing, however. The check for
XkbSetMapResizeTypes rejects those legitimate requests. In particular,
XkbChangeMap never sets XkbSetMapResizeTypes and so always fails now
any time XkbKeyTypesMask is in the changed mask.
This commit drops the check for XkbSetMapResizeTypes in flags when
prevalidating the request length.
Diffstat (limited to 'xkb')
-rw-r--r-- | xkb/xkb.c | 26 |
1 files changed, 12 insertions, 14 deletions
@@ -2405,21 +2405,19 @@ _XkbSetMapCheckLength(xkbSetMapReq *req) keytype = (xkbKeyTypeWireDesc *)(req + 1); for (i = 0; i < req->nTypes; i++) { _add_check_len(XkbPaddedSize(sz_xkbKeyTypeWireDesc)); - if (req->flags & XkbSetMapResizeTypes) { - _add_check_len(keytype->nMapEntries - * sz_xkbKTSetMapEntryWireDesc); - preserve = keytype->preserve; - map_count = keytype->nMapEntries; - if (preserve) { - _add_check_len(map_count * sz_xkbModsWireDesc); - } - keytype += 1; - keytype = (xkbKeyTypeWireDesc *) - ((xkbKTSetMapEntryWireDesc *)keytype + map_count); - if (preserve) - keytype = (xkbKeyTypeWireDesc *) - ((xkbModsWireDesc *)keytype + map_count); + _add_check_len(keytype->nMapEntries + * sz_xkbKTSetMapEntryWireDesc); + preserve = keytype->preserve; + map_count = keytype->nMapEntries; + if (preserve) { + _add_check_len(map_count * sz_xkbModsWireDesc); } + keytype += 1; + keytype = (xkbKeyTypeWireDesc *) + ((xkbKTSetMapEntryWireDesc *)keytype + map_count); + if (preserve) + keytype = (xkbKeyTypeWireDesc *) + ((xkbModsWireDesc *)keytype + map_count); } } /* syms */ |