rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=e36f12e998338a44070998a07487c0bc748660c3

commit e36f12e998338a44070998a07487c0bc748660c3
Author: Mykyta Biliavskyi <[email protected]>
Date:   Mon Sep 26 12:56:46 2016 +0300

    Syntax color: avoid use colored code string after free.
    
    @svace WGID 20010
    @fix
---
 src/bin/external/syntax_color.c  |  4 ++--
 src/bin/external/syntax_color.h  |  2 +-
 src/bin/ui/workspace/workspace.c | 15 ++++++++++-----
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/bin/external/syntax_color.c b/src/bin/external/syntax_color.c
index 1cbf860..23b583f 100644
--- a/src/bin/external/syntax_color.c
+++ b/src/bin/external/syntax_color.c
@@ -663,7 +663,7 @@ color_markup_insert(Eina_Strbuf *strbuf, const char **src, 
int length, char **cu
    return 0;
 }
 
-const char *
+char *
 color_apply(color_data *cd, const char *src, int length, char *from, char *to)
 {
    Eina_Bool inside_string = EINA_FALSE;
@@ -755,7 +755,7 @@ finished:
 
    macro_keys_free(cd);
 
-   return str;
+   return (str == NULL) ? NULL : strdup(str);
 }
 
 Eina_Bool
diff --git a/src/bin/external/syntax_color.h b/src/bin/external/syntax_color.h
index e131bb0..9f4e0de 100644
--- a/src/bin/external/syntax_color.h
+++ b/src/bin/external/syntax_color.h
@@ -29,7 +29,7 @@ const char *
 color_cancel(color_data *cd, const char *str, int length, int from_pos,
              int to_pos, char **from, char **to);
 
-const char *
+char *
 color_apply(color_data *cd, const char *str, int length, char *from, char *to);
 
 Eina_Bool
diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c
index dc54c69..defcae5 100644
--- a/src/bin/ui/workspace/workspace.c
+++ b/src/bin/ui/workspace/workspace.c
@@ -163,12 +163,12 @@ workspace_active_demo_mode_get(Evas_Object *obj)
    return false;
 }
 
-const char *
+char *
 _group_code_get(Workspace_Data *wd)
 {
    Eina_Stringshare *code;
    char *str;
-   const char *colored;
+   char *colored;
 
    code = edje_edit_source_generate(wd->group->edit_object);
    str = elm_entry_utf8_to_markup(code);
@@ -273,10 +273,13 @@ _code_reload(void *data,
 
    Workspace_Data *wd = data;
    Evas_Object *layout;
+   char *color_code = NULL;
 
    if (MODE_CODE != wd->mode) return;
-   elm_entry_entry_set(wd->code.obj, _group_code_get(wd));
+   color_code = _group_code_get(wd);
+   elm_entry_entry_set(wd->code.obj, color_code);
    layout = elm_object_part_content_unset(wd->code.obj, "elm.swallow.overlay");
+   free(color_code);
    ecore_job_add(_object_delete_job, layout);
 }
 
@@ -1147,7 +1150,7 @@ _mode_cb(void *data,
    Evas_Object *content;
    Scroll_Area *area = NULL;
    const Container_Geom *geom;
-
+   char *color_code = NULL;
 #if !HAVE_TIZEN
    mode = elm_radio_value_get(obj);
 #else
@@ -1172,10 +1175,12 @@ _mode_cb(void *data,
    switch (wd->mode)
      {
       case MODE_CODE:
+         color_code =_group_code_get(wd);
          elm_panes_fixed_set(wd->panes_h, false);
          if (wd->code.size == -1) wd->code.size = 0.5;
          elm_panes_content_right_size_set(wd->panes_h, wd->code.size);
-         elm_entry_entry_set(wd->code.obj, _group_code_get(wd));
+         elm_entry_entry_set(wd->code.obj, color_code);
+         free(color_code);
       case MODE_NORMAL:
          elm_object_part_content_set(wd->panes_h, "left", wd->normal.layout);
          evas_object_show(wd->normal.layout);

-- 


Reply via email to