summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Burtsev <kirill.burtsev@qt.io>2021-10-01 12:46:44 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-10-06 06:21:17 +0000
commit53bdbb973a4d5f226e9ba01897d0bd6aef61842e (patch)
tree141d67e49e083f1324878cfedce46719080efae1
parent946858ba9bc9b31d13836b2dfa47acc2b9bc2214 (diff)
Fix leak of properties after XkbRF_GetNamesProp
Struct _XkbRF_VarDefs for XkbRF_GetNamesProp needs special cleanup logic, but it's currently missing from API: https://gitlab.freedesktop.org/xorg/lib/libxkbfile/-/issues/6 Workaround it with manual deinitialization. Change-Id: I3ebe20f58199277521b31b2cd8034c92fd1f2b7f Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu> Reviewed-by: Michal Klocek <michal.klocek@qt.io> (cherry picked from commit acf9d9de2bb3ac195adc257f4a307e447e171614) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/core/ozone/ozone_platform_qt.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/core/ozone/ozone_platform_qt.cpp b/src/core/ozone/ozone_platform_qt.cpp
index 5b42acd9f..8dbacfb2f 100644
--- a/src/core/ozone/ozone_platform_qt.cpp
+++ b/src/core/ozone/ozone_platform_qt.cpp
@@ -164,7 +164,17 @@ static std::string getCurrentKeyboardLayout()
if (XkbGetState(dpy, XkbUseCoreKbd, &state) != 0)
return std::string();
- XkbRF_VarDefsRec vdr;
+ XkbRF_VarDefsRec vdr {}; // zero initialize it
+ struct Cleanup {
+ XkbRF_VarDefsRec &vdr;
+ Cleanup(XkbRF_VarDefsRec &vdr) : vdr(vdr) { }
+ ~Cleanup() {
+ free (vdr.model);
+ free (vdr.layout);
+ free (vdr.variant);
+ free (vdr.options);
+ }
+ } cleanup(vdr);
if (XkbRF_GetNamesProp(dpy, nullptr, &vdr) == 0)
return std::string();