Evas Textblock: Fix NULL dereferencing issue 67/54667/1
authorYoungbok Shin <youngb.shin@samsung.com>
Sun, 13 Dec 2015 15:13:13 +0000 (17:13 +0200)
committerYoungbok Shin <youngb.shin@samsung.com>
Thu, 17 Dec 2015 05:38:14 +0000 (14:38 +0900)
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

src/lib/evas/canvas/evas_object_textblock.c
src/tests/evas/evas_test_textblock.c

index b4db4b6..2057e8c 100644 (file)
@@ -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);
index d15465c..66e19f6 100644 (file)
@@ -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);