kdrive: plug two memory leaks when freeing the KdKeyboard/Pointer.
xkbRules, xkbModel and xkbLayout are strdup'd in KdNewKeyboard, need to be freed. The ephyr driver strdups the name on top of the already allocated kdrive-assigned name. Memory must be freed beforehand. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
fd91313673
commit
a9c274df5c
|
@ -1074,6 +1074,8 @@ MouseInit (KdPointerInfo *pi)
|
||||||
((EphyrPointerPrivate *)pi->driverPrivate)->enabled = FALSE;
|
((EphyrPointerPrivate *)pi->driverPrivate)->enabled = FALSE;
|
||||||
pi->nAxes = 3;
|
pi->nAxes = 3;
|
||||||
pi->nButtons = 32;
|
pi->nButtons = 32;
|
||||||
|
if (pi->name)
|
||||||
|
xfree(pi->name);
|
||||||
pi->name = strdup("Xephyr virtual mouse");
|
pi->name = strdup("Xephyr virtual mouse");
|
||||||
ephyrMouse = pi;
|
ephyrMouse = pi;
|
||||||
return Success;
|
return Success;
|
||||||
|
@ -1123,6 +1125,8 @@ EphyrKeyboardInit (KdKeyboardInfo *ki)
|
||||||
}
|
}
|
||||||
ki->minScanCode = ephyrKeySyms.minKeyCode;
|
ki->minScanCode = ephyrKeySyms.minKeyCode;
|
||||||
ki->maxScanCode = ephyrKeySyms.maxKeyCode;
|
ki->maxScanCode = ephyrKeySyms.maxKeyCode;
|
||||||
|
if (ki->name)
|
||||||
|
xfree(ki->name);
|
||||||
ki->name = strdup("Xephyr virtual keyboard");
|
ki->name = strdup("Xephyr virtual keyboard");
|
||||||
ephyrKbd = ki;
|
ephyrKbd = ki;
|
||||||
return Success;
|
return Success;
|
||||||
|
|
|
@ -166,6 +166,12 @@ KdFreeKeyboard(KdKeyboardInfo *ki)
|
||||||
xfree(ki->name);
|
xfree(ki->name);
|
||||||
if (ki->path)
|
if (ki->path)
|
||||||
xfree(ki->path);
|
xfree(ki->path);
|
||||||
|
if (ki->xkbRules)
|
||||||
|
xfree(ki->xkbRules);
|
||||||
|
if (ki->xkbModel)
|
||||||
|
xfree(ki->xkbModel);
|
||||||
|
if (ki->xkbLayout)
|
||||||
|
xfree(ki->xkbLayout);
|
||||||
ki->next = NULL;
|
ki->next = NULL;
|
||||||
xfree(ki);
|
xfree(ki);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue