From: Youngbok Shin Date: Sun, 13 Dec 2015 15:13:13 +0000 (+0200) Subject: Evas Textblock: Fix NULL dereferencing issue X-Git-Tag: accepted/tizen/mobile/20151218.085952~2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F67%2F54667%2F1;p=platform%2Fupstream%2Fefl.git Evas Textblock: Fix NULL dereferencing issue Summary: Even if the given two cursor is NULL, it shouldn't be crashed. @fix Test Plan: Test case included in Evas test suite. Run "make check". Reviewers: herdsman, tasn Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D3422 Change-Id: Iee812338bb0b007c16ebeea0e93ce86c3f0e67f4 --- diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index b4db4b6..2057e8c 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -9532,9 +9532,6 @@ _evas_textblock_cursor_range_text_markup_get(const Evas_Textblock_Cursor *cur1, Eina_Strbuf *buf; Evas_Textblock_Cursor *cur2; - if (!cur1 || !cur1->node) return NULL; - if (!_cur2 || !_cur2->node) return NULL; - if (cur1->obj != _cur2->obj) return NULL; buf = eina_strbuf_new(); if (evas_textblock_cursor_compare(cur1, _cur2) > 0) @@ -9643,9 +9640,6 @@ _evas_textblock_cursor_range_text_plain_get(const Evas_Textblock_Cursor *cur1, c Evas_Object_Textblock_Node_Text *n1, *n2; Evas_Textblock_Cursor *cur2; - if (!cur1 || !cur1->node) return NULL; - if (!_cur2 || !_cur2->node) return NULL; - if (cur1->obj != _cur2->obj) return NULL; buf = eina_ustrbuf_new(); if (evas_textblock_cursor_compare(cur1, _cur2) > 0) @@ -9770,7 +9764,13 @@ evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const EAPI char * evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) { - Evas_Object_Protected_Data *obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS); + Evas_Object_Protected_Data *obj; + + if (!cur1 || !cur1->node) return NULL; + if (!cur2 || !cur2->node) return NULL; + if (cur1->obj != cur2->obj) return NULL; + + obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS); evas_object_async_block(obj); if (format == EVAS_TEXTBLOCK_TEXT_MARKUP) return _evas_textblock_cursor_range_text_markup_get(cur1, cur2); diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index d15465c..66e19f6 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -2515,6 +2515,14 @@ START_TEST(evas_textblock_text_getters) "and now in english.")); /* Range get */ + /* If one of the given cursor is NULL, it returns NULL. */ + fail_if(evas_textblock_cursor_range_text_get(NULL, NULL, + EVAS_TEXTBLOCK_TEXT_MARKUP)); + fail_if(evas_textblock_cursor_range_text_get(cur, NULL, + EVAS_TEXTBLOCK_TEXT_MARKUP)); + fail_if(evas_textblock_cursor_range_text_get(NULL, cur, + EVAS_TEXTBLOCK_TEXT_MARKUP)); + Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb); evas_textblock_cursor_pos_set(main_cur, 2); evas_textblock_cursor_pos_set(cur, 2);