XkbCopyKeymap: make sure sym_interpret is always valid
Make sure we're not copying sym_interpret across from an empty source.
This commit is contained in:
parent
d9e079d2a3
commit
329f641727
|
@ -1497,30 +1497,33 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src->compat->sym_interpret) {
|
if (src->compat->sym_interpret && src->compat->num_si) {
|
||||||
if (src->compat->size_si != dst->compat->size_si) {
|
if (src->compat->num_si != dst->compat->size_si) {
|
||||||
if (dst->compat->sym_interpret)
|
if (dst->compat->sym_interpret)
|
||||||
tmp = xrealloc(dst->compat->sym_interpret,
|
tmp = xrealloc(dst->compat->sym_interpret,
|
||||||
src->compat->size_si *
|
src->compat->num_si *
|
||||||
sizeof(XkbSymInterpretRec));
|
sizeof(XkbSymInterpretRec));
|
||||||
else
|
else
|
||||||
tmp = xalloc(src->compat->size_si *
|
tmp = xalloc(src->compat->num_si *
|
||||||
sizeof(XkbSymInterpretRec));
|
sizeof(XkbSymInterpretRec));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
dst->compat->sym_interpret = tmp;
|
dst->compat->sym_interpret = tmp;
|
||||||
}
|
}
|
||||||
memcpy(dst->compat->sym_interpret, src->compat->sym_interpret,
|
memcpy(dst->compat->sym_interpret, src->compat->sym_interpret,
|
||||||
src->compat->size_si * sizeof(XkbSymInterpretRec));
|
src->compat->num_si * sizeof(XkbSymInterpretRec));
|
||||||
|
|
||||||
|
dst->compat->num_si = src->compat->num_si;
|
||||||
|
dst->compat->size_si = src->compat->num_si;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (dst->compat->sym_interpret) {
|
if (dst->compat->sym_interpret && dst->compat->size_si)
|
||||||
xfree(dst->compat->sym_interpret);
|
xfree(dst->compat->sym_interpret);
|
||||||
dst->compat->sym_interpret = NULL;
|
|
||||||
}
|
dst->compat->sym_interpret = NULL;
|
||||||
|
dst->compat->num_si = 0;
|
||||||
|
dst->compat->size_si = 0;
|
||||||
}
|
}
|
||||||
dst->compat->num_si = src->compat->num_si;
|
|
||||||
dst->compat->size_si = src->compat->size_si;
|
|
||||||
|
|
||||||
memcpy(dst->compat->groups, src->compat->groups,
|
memcpy(dst->compat->groups, src->compat->groups,
|
||||||
XkbNumKbdGroups * sizeof(XkbModsRec));
|
XkbNumKbdGroups * sizeof(XkbModsRec));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user