mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-08 14:58:08 +02:00
xkb: when copying the keymap, make sure the structs default to 0/NULL.
It actually does help if a pointer is NULL rather than pointing to nirvana
when you're trying to free it lateron. Who would have thought?
(cherry picked from commit 7a97ca667405a42d008265c3a870210cc1da97dd)
(cherry picked from commit 0b0a097973)
This commit is contained in:
parent
4e5cf76eca
commit
ddcca23a81
1 changed files with 15 additions and 8 deletions
|
|
@ -1707,9 +1707,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
else {
|
||||
if (dst->geom->sz_shapes) {
|
||||
xfree(dst->geom->shapes);
|
||||
dst->geom->shapes = NULL;
|
||||
}
|
||||
|
||||
dst->geom->shapes = NULL;
|
||||
dst->geom->num_shapes = 0;
|
||||
dst->geom->sz_shapes = 0;
|
||||
}
|
||||
|
|
@ -1758,6 +1757,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
}
|
||||
|
||||
dst->geom->num_sections = 0;
|
||||
dst->geom->sections = NULL;
|
||||
}
|
||||
|
||||
if (src->geom->num_sections) {
|
||||
|
|
@ -1769,6 +1769,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
tmp = xalloc(src->geom->num_sections * sizeof(XkbSectionRec));
|
||||
if (!tmp)
|
||||
return FALSE;
|
||||
memset(tmp, 0, src->geom->num_sections * sizeof(XkbSectionRec));
|
||||
dst->geom->sections = tmp;
|
||||
dst->geom->num_sections = src->geom->num_sections;
|
||||
|
||||
|
|
@ -1804,6 +1805,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
return FALSE;
|
||||
dsection->doodads = tmp;
|
||||
}
|
||||
else {
|
||||
dsection->doodads = NULL;
|
||||
}
|
||||
|
||||
for (k = 0,
|
||||
sdoodad = ssection->doodads,
|
||||
ddoodad = dsection->doodads;
|
||||
|
|
@ -1831,9 +1836,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
else {
|
||||
if (dst->geom->sz_sections) {
|
||||
xfree(dst->geom->sections);
|
||||
dst->geom->sections = NULL;
|
||||
}
|
||||
|
||||
dst->geom->sections = NULL;
|
||||
dst->geom->num_sections = 0;
|
||||
dst->geom->sz_sections = 0;
|
||||
}
|
||||
|
|
@ -1862,6 +1867,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
}
|
||||
}
|
||||
}
|
||||
dst->geom->num_doodads = 0;
|
||||
dst->geom->doodads = NULL;
|
||||
}
|
||||
|
||||
if (src->geom->num_doodads) {
|
||||
|
|
@ -1874,7 +1881,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
sizeof(XkbDoodadRec));
|
||||
if (!tmp)
|
||||
return FALSE;
|
||||
bzero(tmp, src->geom->num_doodads * sizeof(XkbDoodadRec));
|
||||
memset(tmp, 0, src->geom->num_doodads * sizeof(XkbDoodadRec));
|
||||
dst->geom->doodads = tmp;
|
||||
|
||||
dst->geom->sz_doodads = src->geom->num_doodads;
|
||||
|
|
@ -1903,9 +1910,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
else {
|
||||
if (dst->geom->sz_doodads) {
|
||||
xfree(dst->geom->doodads);
|
||||
dst->geom->doodads = NULL;
|
||||
}
|
||||
|
||||
dst->geom->doodads = NULL;
|
||||
dst->geom->num_doodads = 0;
|
||||
dst->geom->sz_doodads = 0;
|
||||
}
|
||||
|
|
@ -1933,10 +1940,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
dst->geom->num_key_aliases = dst->geom->sz_key_aliases;
|
||||
}
|
||||
else {
|
||||
if (dst->geom->sz_key_aliases && dst->geom->key_aliases) {
|
||||
if (dst->geom->key_aliases) {
|
||||
xfree(dst->geom->key_aliases);
|
||||
dst->geom->key_aliases = NULL;
|
||||
}
|
||||
dst->geom->key_aliases = NULL;
|
||||
dst->geom->num_key_aliases = 0;
|
||||
dst->geom->sz_key_aliases = 0;
|
||||
}
|
||||
|
|
@ -1967,8 +1974,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
|||
else {
|
||||
if (dst->geom->label_font) {
|
||||
xfree(dst->geom->label_font);
|
||||
dst->geom->label_font = NULL;
|
||||
}
|
||||
dst->geom->label_font = NULL;
|
||||
dst->geom->label_color = NULL;
|
||||
dst->geom->base_color = NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue