From ba2fe631679775cc5e25fe0e7b9769e7bc0e0f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Sat, 25 Mar 2017 17:33:22 +0100 Subject: [PATCH] Fix memory leak after use XGetAtomName MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Slávek Banko --- kxkb/kcmmisc.cpp | 21 +++++++++++---------- tdekbdledsync/main.cpp | 7 ++++++- tdm/kfrontend/tdm_greet.c | 7 ++++++- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/kxkb/kcmmisc.cpp b/kxkb/kcmmisc.cpp index 1687b1c81..358d10450 100644 --- a/kxkb/kcmmisc.cpp +++ b/kxkb/kcmmisc.cpp @@ -274,26 +274,27 @@ int xkb_init() && XkbQueryExtension( dpy, &xkb_opcode, &xkb_event, &xkb_error, &xkb_lmaj, &xkb_lmin ); } - + unsigned int xkb_mask_modifier( XkbDescPtr xkb, const char *name ) - { +{ int i; if( !xkb || !xkb->names ) return 0; - for( i = 0; - i < XkbNumVirtualMods; - i++ ) - { + for( i = 0; i < XkbNumVirtualMods; i++ ) { char* modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] ); - if( modStr != NULL && strcmp(name, modStr) == 0 ) - { + if( modStr == NULL ) { + continue; + } + if( strcmp(name, modStr) == 0 ) { unsigned int mask; XkbVirtualModsToReal( xkb, 1 << i, &mask ); + XFree(modStr); return mask; - } } - return 0; + XFree(modStr); } + return 0; +} unsigned int xkb_numlock_mask() { diff --git a/tdekbdledsync/main.cpp b/tdekbdledsync/main.cpp index 42bb6c9df..0f4075694 100644 --- a/tdekbdledsync/main.cpp +++ b/tdekbdledsync/main.cpp @@ -193,11 +193,16 @@ unsigned int xkb_mask_modifier(XkbDescPtr xkb, const char *name) { } for( i = 0; i < XkbNumVirtualMods; i++ ) { char* modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] ); - if( modStr != NULL && strcmp(name, modStr) == 0 ) { + if( modStr == NULL ) { + continue; + } + if( strcmp(name, modStr) == 0 ) { unsigned int mask; XkbVirtualModsToReal( xkb, 1 << i, &mask ); + XFree(modStr); return mask; } + XFree(modStr); } return 0; } diff --git a/tdm/kfrontend/tdm_greet.c b/tdm/kfrontend/tdm_greet.c index 5c77fadf0..6f8c84caf 100644 --- a/tdm/kfrontend/tdm_greet.c +++ b/tdm/kfrontend/tdm_greet.c @@ -568,11 +568,16 @@ xkb_modifier_mask_work( XkbDescPtr xkb, const char *name ) return 0; for (i = 0; i < XkbNumVirtualMods; i++) { char *modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] ); - if (modStr != NULL && strcmp( name, modStr ) == 0) { + if( modStr == NULL ) { + continue; + } + if( strcmp( name, modStr ) == 0 ) { unsigned int mask; XkbVirtualModsToReal( xkb, 1 << i, &mask ); + XFree(modStr); return mask; } + XFree(modStr); } return 0; }