]> git.sur5r.net Git - i3/i3/commit
Fix memory leak when _XKB_RULES_NAMES can't be found 3213/head
authorOrestis Floros <orestisf1993@gmail.com>
Thu, 29 Mar 2018 14:42:58 +0000 (17:42 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Thu, 29 Mar 2018 14:46:41 +0000 (17:46 +0300)
commit4143f3abfc45895ac109cdcbd22c4268d39b9ef1
tree6afec94e99d309517777710878787ae3af12c206
parent77bfa595df2ff1477a37580c2d25c3b63148ed90
Fix memory leak when _XKB_RULES_NAMES can't be found

Steps to reproduce:

1. Force the branch to be taken:

diff --git a/src/bindings.c b/src/bindings.c
index fe77bc8f..caa5848c 100644
--- a/src/bindings.c
+++ b/src/bindings.c
@@ -941,7 +941,7 @@ bool load_keymap(void) {

     struct xkb_keymap *new_keymap = NULL;
     int32_t device_id;
-    if (xkb_supported && (device_id = xkb_x11_get_core_keyboard_device_id(conn)) > -1) {
+    if (0) {
         if ((new_keymap = xkb_x11_keymap_new_from_device(xkb_context, conn, device_id, 0)) == NULL) {
             ELOG("xkb_x11_keymap_new_from_device failed\n");
             return false;

2. Run `python2 ./xproperty.py _XKB_RULES_NAMES ''` (from
https://github.com/siemer/xproperty) in the xinitrc
3. Memory sanitizers detect memory leaks.

Note: We don't (and didn't) pass NULL in xkb_keymap_new_from_names() but
an xkb_rule_names structures with NULL fields (fill_rmlvo_from_root only
fills its argument when there are no errors) should be equivalent:
https://github.com/xkbcommon/libxkbcommon/blob/767fa86d42a5e25e7043622d189247e02a5ca379/NEWS#L349-L351
> The function xkb_keymap_new_from_names() now accepts a NULL value for
the 'names' parameter, instead of failing. This is equivalent to passing
a 'struct xkb_rule_names' with all fields set to NULL.

Fixes #2535.
src/bindings.c