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:
Daniel Stone 2006-12-08 21:31:47 +02:00 committed by Daniel Stone
parent e59aeac1ff
commit ec84f72d07

View File

@ -1144,6 +1144,11 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
memcpy(dtype->map, stype->map,
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->map_count != dtype->map_count &&
@ -1168,17 +1173,22 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
memcpy(dtype->preserve, stype->preserve,
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;
}
else {
if (dtype->map_count) {
if (dtype->map_count && i < dst->map->num_types) {
if (dtype->map)
xfree(dtype->map);
if (dtype->preserve)
xfree(dtype->preserve);
dtype->map_count = 0;
}
dtype->map_count = 0;
dtype->map = NULL;
dtype->preserve = NULL;
}