stefan pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7ac765c71b94c1124cb8d672960a12758747cad9

commit 7ac765c71b94c1124cb8d672960a12758747cad9
Author: Ali <[email protected]>
Date:   Thu Apr 16 15:51:31 2020 +0000

    evas_textblock: prevent segfault if there are no style
    
    ```
    #include <Elementary.h>
    
    EAPI_MAIN int
    elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
    {
       Evas_Object *win, *textblock;
    
       elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
    
       win = elm_win_util_standard_add("", "");
       elm_win_autodel_set(win, EINA_TRUE);
    
       textblock = evas_object_textblock_add(win);
       evas_object_resize(textblock, 360, 360);
       evas_object_show(textblock);
       evas_object_textblock_text_markup_set(textblock, "<b>b</b>");
       evas_object_resize(win, 360, 360);
       evas_object_show(win);
       elm_run();
    
       return 0;
    }
    ELM_MAIN()
    ```
    
    this application will crash.
    
    Any font format specified in text, if there are now style will cause the 
crash.
    
    Reviewed-by: Mike Blumenkrantz <[email protected]>
    Reviewed-by: Stefan Schmidt <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D11686
---
 src/lib/evas/canvas/evas_font_dir.c  |  3 +++
 src/tests/evas/evas_test_textblock.c | 17 +++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/lib/evas/canvas/evas_font_dir.c 
b/src/lib/evas/canvas/evas_font_dir.c
index 533993f94a..18367fbb0a 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -187,6 +187,9 @@ evas_font_set_get(const char *name)
    Eina_List *fonts = NULL;
    char *p;
 
+   EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
+   if (!*name) return NULL;
+
    p = strchr(name, ',');
    if (!p)
      {
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index d3c575039d..d26b8fc7b9 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -3772,6 +3772,22 @@ EFL_START_TEST(evas_textblock_style)
 }
 EFL_END_TEST
 
+/* Textblock functionality without style. */
+EFL_START_TEST(evas_textblock_style_empty)
+{
+   Evas *evas;
+   Evas_Object *txt;
+   Evas_Coord w, h;
+   evas = EVAS_TEST_INIT_EVAS();
+   txt = evas_object_textblock_add(evas);
+   evas_object_textblock_text_markup_set(txt, "<b></b>");
+   evas_object_textblock_size_formatted_get(txt, &w, &h);
+   ck_assert_int_eq(w, 0);
+   ck_assert_int_eq(h, 0);
+   evas_free(evas);
+}
+EFL_END_TEST
+
 /* Basic test for style user push/peek/pop. */
 EFL_START_TEST(evas_textblock_style_user)
 {
@@ -5045,6 +5061,7 @@ void evas_test_textblock(TCase *tc)
    tcase_add_test(tc, evas_textblock_size);
    tcase_add_test(tc, evas_textblock_editing);
    tcase_add_test(tc, evas_textblock_style);
+   tcase_add_test(tc, evas_textblock_style_empty);
    tcase_add_test(tc, evas_textblock_style_user);
    tcase_add_test(tc, evas_textblock_evas);
    tcase_add_test(tc, evas_textblock_text_getters);

-- 


Reply via email to