From ff02028ec9821f0f8198dc5a3779264feaaa0302 Mon Sep 17 00:00:00 2001 From: javigafe Date: Sun, 2 Feb 2020 11:52:48 +0100 Subject: [PATCH] Fix memory issues Add some free's --- XKeyboard.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/XKeyboard.cpp b/XKeyboard.cpp index 34ab42d..83d11eb 100644 --- a/XKeyboard.cpp +++ b/XKeyboard.cpp @@ -36,6 +36,7 @@ XKeyboard::XKeyboard() int reasonReturn; _display = XkbOpenDisplay(displayName, &eventCode, &errorReturn, &major, &minor, &reasonReturn); + free(displayName); switch (reasonReturn) { case XkbOD_BadLibraryVersion: throw X11Exception("Bad XKB library version."); @@ -91,6 +92,10 @@ Bool XKeyboard::initializeXkb() if (kbdDescPtr->names == NULL) { std::cerr << "Failed to get keyboard description." << std::endl; + XFree(kbdDescPtr); + XkbFreeControls(kbdDescPtr, XkbAllControlsMask, true); + XkbFreeNames(kbdDescPtr, XkbSymbolsNameMask, true); + XkbFreeNames(kbdDescPtr, XkbGroupNamesMask, true); return False; } @@ -141,9 +146,17 @@ Bool XKeyboard::initializeXkb() symName = symNameC; XFree(symNameC); if (symName.empty()) { + XFree(kbdDescPtr); + XkbFreeControls(kbdDescPtr, XkbAllControlsMask, true); + XkbFreeNames(kbdDescPtr, XkbSymbolsNameMask, true); + XkbFreeNames(kbdDescPtr, XkbGroupNamesMask, true); return False; } } else { + XFree(kbdDescPtr); + XkbFreeControls(kbdDescPtr, XkbAllControlsMask, true); + XkbFreeNames(kbdDescPtr, XkbSymbolsNameMask, true); + XkbFreeNames(kbdDescPtr, XkbGroupNamesMask, true); return False; } @@ -190,6 +203,10 @@ Bool XKeyboard::initializeXkb() XkbStateRec xkbState; XkbGetState(_display, _deviceId, &xkbState); _currentGroupNum = xkbState.group; + XFree(kbdDescPtr); + XkbFreeControls(kbdDescPtr, XkbAllControlsMask, true); + XkbFreeNames(kbdDescPtr, XkbSymbolsNameMask, true); + XkbFreeNames(kbdDescPtr, XkbGroupNamesMask, true); return True; }