From ee83cec031c5ea70b337222acc162f3fc5936956 Mon Sep 17 00:00:00 2001 From: Jiwon Kim Date: Thu, 24 Mar 2016 10:14:50 +0200 Subject: [PATCH] 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 Change-Id: I5dc72d755b62a03a1ec0fac89e52ae59cee9dcb6 --- src/lib/evas/canvas/evas_object_textblock.c | 13 ++++++++----- src/tests/evas/evas_test_textblock.c | 8 ++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index dd886e4..daf344e 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -771,13 +771,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; + } } } diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 011cd49..bf151c6 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -68,6 +68,14 @@ START_TEST(evas_textblock_simple) const char *buf = "This is a
test."; 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 -- 2.7.4