evas: add a few null checks for e->engine.data.output

this can be null if engine info has not yet been set or if engine info
has been unset, leading to engine crashes. instead of adding null checks in
every engine, better to add the checks to the originating functions

someone with time to kill should go through all the EAPI functions and
add more checks
This commit is contained in:
Mike Blumenkrantz 2016-05-05 10:33:28 -04:00
parent fd1c06153b
commit 6f4f0100d2
2 changed files with 15 additions and 8 deletions

View File

@ -1469,7 +1469,7 @@ _evas_canvas_font_hinting_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
EOLIAN Eina_Bool
_evas_canvas_font_hinting_can_hint(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Evas_Font_Hinting_Flags hinting)
{
if (e->engine.func->font_hinting_can_hint)
if (e->engine.func->font_hinting_can_hint && e->engine.data.output)
return e->engine.func->font_hinting_can_hint(e->engine.data.output,
hinting);
else return EINA_FALSE;
@ -1480,7 +1480,8 @@ _evas_canvas_font_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
{
evas_canvas_async_block(e);
evas_render_rendering_wait(e);
e->engine.func->font_cache_flush(e->engine.data.output);
if (e->engine.data.output)
e->engine.func->font_cache_flush(e->engine.data.output);
}
EOLIAN void
@ -1489,14 +1490,16 @@ _evas_canvas_font_cache_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, int size)
if (size < 0) size = 0;
evas_canvas_async_block(e);
evas_render_rendering_wait(e);
e->engine.func->font_cache_set(e->engine.data.output, size);
if (e->engine.data.output)
e->engine.func->font_cache_set(e->engine.data.output, size);
}
EOLIAN int
_evas_canvas_font_cache_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
{
return e->engine.func->font_cache_get(e->engine.data.output);
if (e->engine.data.output)
return e->engine.func->font_cache_get(e->engine.data.output);
return -1;
}
EOLIAN Eina_List*

View File

@ -1119,7 +1119,8 @@ _evas_canvas_image_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
{
evas_canvas_async_block(e);
evas_render_rendering_wait(e);
e->engine.func->image_cache_flush(e->engine.data.output);
if (e->engine.data.output)
e->engine.func->image_cache_flush(e->engine.data.output);
}
EOLIAN void
@ -1167,13 +1168,16 @@ _evas_canvas_image_cache_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, int size
if (size < 0) size = 0;
evas_canvas_async_block(e);
evas_render_rendering_wait(e);
e->engine.func->image_cache_set(e->engine.data.output, size);
if (e->engine.data.output)
e->engine.func->image_cache_set(e->engine.data.output, size);
}
EOLIAN int
_evas_canvas_image_cache_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
{
return e->engine.func->image_cache_get(e->engine.data.output);
if (e->engine.data.output)
return e->engine.func->image_cache_get(e->engine.data.output);
return -1;
}
EOLIAN Eina_Bool