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;

-- 


Reply via email to