raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=1c82a88d6e7f10ad74340a95535561204e89ad96
commit 1c82a88d6e7f10ad74340a95535561204e89ad96 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Fri Aug 22 19:42:36 2014 +0900 evas text - deal with possible null text in layout fix CID 1039408 --- src/lib/evas/canvas/evas_object_text.c | 74 ++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c index 5ef4bdb..37a4c56 100644 --- a/src/lib/evas/canvas/evas_object_text.c +++ b/src/lib/evas/canvas/evas_object_text.c @@ -700,10 +700,14 @@ _evas_object_text_layout(Evas_Object *eo_obj, Evas_Text_Data *o, Eina_Unicode *t o->bidi_dir = EVAS_BIDI_DIRECTION_NEUTRAL; #ifdef BIDI_SUPPORT - if (o->bidi_delimiters) - segment_idxs = evas_bidi_segment_idxs_get(text, o->bidi_delimiters); + if (text) + { + if (o->bidi_delimiters) + segment_idxs = evas_bidi_segment_idxs_get(text, o->bidi_delimiters); + } evas_bidi_paragraph_props_unref(o->bidi_par_props); - o->bidi_par_props = evas_bidi_paragraph_props_get(text, len, segment_idxs); + if (text) + o->bidi_par_props = evas_bidi_paragraph_props_get(text, len, segment_idxs); if (o->bidi_par_props) o->bidi_dir = EVAS_BIDI_PAR_TYPE_TO_DIRECTION(o->bidi_par_props->direction); @@ -713,44 +717,46 @@ _evas_object_text_layout(Evas_Object *eo_obj, Evas_Text_Data *o, Eina_Unicode *t #endif visual_pos = pos = 0; - while (len > 0) + if (text) { - Evas_Font_Instance *script_fi = NULL; - int script_len = len, tmp_cut; - Evas_Script_Type script; - tmp_cut = evas_common_language_script_end_of_run_get( - text + pos, - o->bidi_par_props, - pos, len); - if (tmp_cut > 0) - script_len = tmp_cut; - - script = evas_common_language_script_type_get(text + pos, script_len); - - while (script_len > 0) + while (len > 0) { - const Evas_Object_Text_Item *it; - Evas_Font_Instance *cur_fi = NULL; - int run_len = script_len; - if (o->font) + Evas_Font_Instance *script_fi = NULL; + int script_len = len, tmp_cut; + Evas_Script_Type script; + tmp_cut = evas_common_language_script_end_of_run_get + (text + pos, + o->bidi_par_props, + pos, len); + if (tmp_cut > 0) script_len = tmp_cut; + + script = evas_common_language_script_type_get(text + pos, script_len); + + while (script_len > 0) { - run_len = ENFN->font_run_end_get(ENDT, - o->font, &script_fi, &cur_fi, - script, text + pos, script_len); - } + const Evas_Object_Text_Item *it; + Evas_Font_Instance *cur_fi = NULL; + int run_len = script_len; + if (o->font) + { + run_len = ENFN->font_run_end_get + (ENDT, o->font, &script_fi, &cur_fi, + script, text + pos, script_len); + } #ifdef BIDI_SUPPORT - visual_pos = evas_bidi_position_logical_to_visual( - v_to_l, par_len, pos); + visual_pos = evas_bidi_position_logical_to_visual + (v_to_l, par_len, pos); #else - visual_pos = pos; + visual_pos = pos; #endif - it = _evas_object_text_item_new(obj, o, cur_fi, text, script, - pos, visual_pos, run_len); + it = _evas_object_text_item_new(obj, o, cur_fi, text, script, + pos, visual_pos, run_len); - advance += it->adv; - pos += run_len; - script_len -= run_len; - len -= run_len; + advance += it->adv; + pos += run_len; + script_len -= run_len; + len -= run_len; + } } } o->last_computed.advance_without_ellipsis = advance; --
