raster pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=7c4e58a2fcdb824afdcabc8aee3bacf2a30e3d69
commit 7c4e58a2fcdb824afdcabc8aee3bacf2a30e3d69 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Fri Aug 9 00:39:19 2019 +0100 xkb - module - fix use after free - duplicate layout info instead instead of referring to what migh tbe deleted under us - make a dup of it to tsatore locally. fixes segv on kbd layout change @fix --- src/modules/xkbswitch/e_mod_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/modules/xkbswitch/e_mod_main.c b/src/modules/xkbswitch/e_mod_main.c index af1b80165..a361a5241 100644 --- a/src/modules/xkbswitch/e_mod_main.c +++ b/src/modules/xkbswitch/e_mod_main.c @@ -146,7 +146,7 @@ _xkb_update_icon(int cur_group) EINA_LIST_FOREACH(instances, l, inst) { if (!e_config_xkb_layout_eq(e_config->xkb.current_layout, inst->layout)) - inst->layout = e_config->xkb.current_layout; + inst->layout = e_config_xkb_layout_dup(e_config->xkb.current_layout); E_FREE_FUNC(inst->o_xkbflag, evas_object_del); e_theme_edje_object_set(inst->o_xkbswitch, "base/theme/modules/xkbswitch", @@ -160,7 +160,7 @@ _xkb_update_icon(int cur_group) EINA_LIST_FOREACH(instances, l, inst) { if (!e_config_xkb_layout_eq(e_config->xkb.current_layout, inst->layout)) - inst->layout = e_config->xkb.current_layout; + inst->layout = e_config_xkb_layout_dup(e_config->xkb.current_layout); if (!inst->o_xkbflag) inst->o_xkbflag = e_icon_add(inst->gcc->gadcon->evas); e_theme_edje_object_set(inst->o_xkbswitch, @@ -186,7 +186,7 @@ _gc_init(E_Gadcon *gc, const char *gcname, const char *id, const char *style) inst = E_NEW(Instance, 1); /* The gadget */ inst->o_xkbswitch = edje_object_add(gc->evas); - inst->layout = e_xkb_layout_get(); + inst->layout = e_config_xkb_layout_dup(e_xkb_layout_get()); if (e_config->xkb.only_label || (!inst->layout)) e_theme_edje_object_set(inst->o_xkbswitch, "base/theme/modules/xkbswitch", @@ -242,6 +242,7 @@ _gc_shutdown(E_Gadcon_Client *gcc) evas_object_del(inst->o_xkbswitch); evas_object_del(inst->o_xkbflag); } + e_config_xkb_layout_free(inst->layout); E_FREE(inst); } --
