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
This commit is contained in:
Carsten Haitzler 2019-08-09 00:39:19 +01:00
parent ac6ceb0b99
commit 7c4e58a2fc
1 changed files with 4 additions and 3 deletions

View File

@ -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);
}