Evas textblock: Fix crash when cutting ligatures with formats.
authorTom Hacohen <tom@stosb.com>
Wed, 4 Jun 2014 09:14:24 +0000 (10:14 +0100)
committerTom Hacohen <tom@stosb.com>
Wed, 4 Jun 2014 09:14:24 +0000 (10:14 +0100)
"f<color=#f00>i</color>f" could cause textblock to crash. It doesn't
crash anymore. It doesn't render the colours correctly either, but at
least this is the first step.

This is the start of fixing T1308

@bugfix

src/lib/evas/common/evas_text_utils.c
src/tests/evas/evas_test_textblock.c

index 2b43695..dc2407f 100644 (file)
@@ -180,6 +180,10 @@ evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff)
    int max = props->len - 1;
    int mid;
 
+   /* Props can be empty, verify they are not before going on. */
+   if (!props->info)
+      return -1;
+
    _cutoff += props->text_offset;
    ot_info = props->info->ot + props->start;
    /* Should get us closer to the right place. */
index 4c48b60..d8949e2 100644 (file)
@@ -2612,6 +2612,9 @@ START_TEST(evas_textblock_formats)
    evas_object_textblock_text_markup_prepend(cur, "<b></b>");
    ck_assert_str_eq(evas_object_textblock_text_markup_get(tb), "ab<b></b>c<br/>def");
 
+   /* Ligatures cut by formats */
+   evas_object_textblock_text_markup_set(tb, "f<color=#f00>i</color>f");
+   evas_object_textblock_size_formatted_get(tb, NULL, NULL);
 
    END_TB_TEST();
 }