Evas textblock: fix null-derefernce in _style_match_tag()

Summary:
add null check in _style_match_tag()
if evas_object_textblock_text_markup_set() is called with markup text before setting style,
segmentation fault is occurred in _style_match_tag()
@fix

Test Plan:
Insert this situation to test suite
 -> test id : evas_textblock_simple

Test for without this patch:
 1. apply patch just "src/tests/evas/evas_test_textblock.c" partially.
 2. $make check

Test for with this patch:
 1. apply this patch completely (2 files)
 2. $make check

Reviewers: id213sin, herdsman

Subscribers: Blackmole, cedric, jpeg

Projects: #efl

Differential Revision: https://phab.enlightenment.org/D3818
This commit is contained in:
Jiwon Kim 2016-03-24 10:14:50 +02:00 committed by Daniel Hirt
parent 959e6de3e7
commit c23283944b
2 changed files with 16 additions and 5 deletions

View File

@ -757,13 +757,16 @@ _style_match_tag(const Evas_Textblock_Style *ts, const char *s, size_t tag_len,
Evas_Object_Style_Tag *tag;
/* Try the style tags */
EINA_INLIST_FOREACH(ts->tags, tag)
if (ts)
{
if (tag->tag.tag_len != tag_len) continue;
if (!strncmp(tag->tag.tag, s, tag_len))
EINA_INLIST_FOREACH(ts->tags, tag)
{
*replace_len = tag->tag.replace_len;
return tag->tag.replace;
if (tag->tag.tag_len != tag_len) continue;
if (!strncmp(tag->tag.tag, s, tag_len))
{
*replace_len = tag->tag.replace_len;
return tag->tag.replace;
}
}
}

View File

@ -68,6 +68,14 @@ START_TEST(evas_textblock_simple)
const char *buf = "Th<i>i</i>s is a <br/> te<b>s</b>t.";
evas_object_textblock_text_markup_set(tb, buf);
fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
/* Set markup text(includes tag) without setting style */
Evas_Object *tb2 = evas_object_textblock_add(evas);
fail_if(!tb2);
evas_object_textblock_text_markup_set(tb2, buf);
ck_assert("Crash Not occurred");
evas_object_del(tb2);
END_TB_TEST();
}
END_TEST