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

-- 


Reply via email to