From 3f5066278ea25e21b80c0f7cf2e5666ad21f3702 Mon Sep 17 00:00:00 2001 From: "Minwoo, Lee" Date: Wed, 6 Jan 2016 11:24:16 -0800 Subject: [PATCH] evas: fix a NULL dereference issue Summary: If evas engine init failed, it can make crash. For example If opengl init failed, then ee->prop.window is 0 ecore_evas_gl_x11_options_new_internal { if (!ee->prop.window) { ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver); ecore_evas_free(ee); return NULL; } } ecore_evas_free calls evas_fonts_zero_pressure and this time evas->engine.func is NULL so it makes crash. Reviewers: cedric Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D3542 Signed-off-by: Cedric BAIL --- src/lib/evas/canvas/evas_font_dir.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_font_dir.c b/src/lib/evas/canvas/evas_font_dir.c index b54e6c0..ffb4423 100644 --- a/src/lib/evas/canvas/evas_font_dir.c +++ b/src/lib/evas/canvas/evas_font_dir.c @@ -148,7 +148,8 @@ evas_fonts_zero_free(Evas *eo_evas) { if (fd->fdesc) evas_font_desc_unref(fd->fdesc); if (fd->source) eina_stringshare_del(fd->source); - evas->engine.func->font_free(evas->engine.data.output, fd->font); + if ((evas->engine.func) && (evas->engine.func->font_free)) + evas->engine.func->font_free(evas->engine.data.output, fd->font); #ifdef HAVE_FONTCONFIG if (fd->set) FcFontSetDestroy(fd->set); if (fd->p_nm) FcPatternDestroy(fd->p_nm); @@ -173,7 +174,8 @@ evas_fonts_zero_pressure(Evas *eo_evas) if (fd->fdesc) evas_font_desc_unref(fd->fdesc); if (fd->source) eina_stringshare_del(fd->source); - evas->engine.func->font_free(evas->engine.data.output, fd->font); + if ((evas->engine.func) && (evas->engine.func->font_free)) + evas->engine.func->font_free(evas->engine.data.output, fd->font); #ifdef HAVE_FONTCONFIG if (fd->set) FcFontSetDestroy(fd->set); if (fd->p_nm) FcPatternDestroy(fd->p_nm); -- 2.7.4