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