XkbCopyKeymap: always initialise map and preserve
If we don't have map or preserve in the source map, make sure the destination is initialised to NULL, and freed if it's a valid type.
This commit is contained in:
parent
e59aeac1ff
commit
ec84f72d07
|
@ -1144,6 +1144,11 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
memcpy(dtype->map, stype->map,
|
memcpy(dtype->map, stype->map,
|
||||||
stype->map_count * sizeof(XkbKTMapEntryRec));
|
stype->map_count * sizeof(XkbKTMapEntryRec));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (dtype->map && i < dst->map->num_types)
|
||||||
|
xfree(dtype->map);
|
||||||
|
dtype->map = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (stype->preserve) {
|
if (stype->preserve) {
|
||||||
if (stype->map_count != dtype->map_count &&
|
if (stype->map_count != dtype->map_count &&
|
||||||
|
@ -1168,17 +1173,22 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
memcpy(dtype->preserve, stype->preserve,
|
memcpy(dtype->preserve, stype->preserve,
|
||||||
stype->map_count * sizeof(XkbModsRec));
|
stype->map_count * sizeof(XkbModsRec));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (dtype->preserve && i < dst->map->num_types)
|
||||||
|
xfree(dtype->preserve);
|
||||||
|
dtype->preserve = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
dtype->map_count = stype->map_count;
|
dtype->map_count = stype->map_count;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (dtype->map_count) {
|
if (dtype->map_count && i < dst->map->num_types) {
|
||||||
if (dtype->map)
|
if (dtype->map)
|
||||||
xfree(dtype->map);
|
xfree(dtype->map);
|
||||||
if (dtype->preserve)
|
if (dtype->preserve)
|
||||||
xfree(dtype->preserve);
|
xfree(dtype->preserve);
|
||||||
dtype->map_count = 0;
|
|
||||||
}
|
}
|
||||||
|
dtype->map_count = 0;
|
||||||
dtype->map = NULL;
|
dtype->map = NULL;
|
||||||
dtype->preserve = NULL;
|
dtype->preserve = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue