xkb: Fix serialization of key type without level names

Before this commit the count of key type level names was wrongly set
in `XkbGetNames`: for key type without names, it was set to the level
count, while it should be 0:
- `XkbComputeGetNamesReplySize()` does not account key type without
  level names;
- `XkbSendNames()` does not write any level entry for key types without
  level names.

This causes a mismatch offset while parsing the response and its
processing would ultimately fail.

Fixed by setting the correct level name count: 0 if there is no level
name, else the number of levels.
This commit is contained in:
Pierre Le Marre 2025-10-16 07:06:38 +02:00
parent 9ddaf5b1ee
commit d97d68f25f
No known key found for this signature in database
GPG key ID: 3BFB00E5C59E818E

View file

@ -3939,7 +3939,8 @@ XkbSendNames(ClientPtr client, XkbDescPtr xkb, xkbGetNamesReply * rep)
register CARD32 *atm;
for (i = 0; i < rep->nTypes; i++, type++) {
*desc++ = type->num_levels;
/* Either no name or all of them, even empty ones */
*desc++ = (type->level_names) ? type->num_levels : 0;
}
desc += XkbPaddedSize(rep->nTypes) - rep->nTypes;