diff --git a/xkb/xkb.c b/xkb/xkb.c index bfc21de00..820cd7166 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -2511,16 +2511,15 @@ _XkbSetMapChecks(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq * req, } } - if (!(req->present & XkbKeyTypesMask)) { - nTypes = xkb->map->num_types; - } - else if (!CheckKeyTypes(client, xkb, req, (xkbKeyTypeWireDesc **) &values, - &nTypes, mapWidths, doswap)) { + /* nTypes/mapWidths/symsPerKey must be filled for further tests below, + * regardless of client-side flags */ + + if (!CheckKeyTypes(client, xkb, req, (xkbKeyTypeWireDesc **) &values, + &nTypes, mapWidths, doswap)) { client->errorValue = nTypes; return BadValue; } - /* symsPerKey/mapWidths must be filled regardless of client-side flags */ map = &xkb->map->key_sym_map[xkb->min_key_code]; for (i = xkb->min_key_code; i < xkb->max_key_code; i++, map++) { register int g, ng, w;