forked from enlightenment/efl
evas: fix type checking of Evas pointers in legacy functions
many of these functions go directly to evas internals with no eo checks, and the existing "MAGIC_CHECK" macro has somehow become a useless null check type checking here is important in order to avoid crazy behavior when the wrong object types are passed @fix Reviewed-by: Cedric BAIL <cedric.bail@free.fr> Differential Revision: https://phab.enlightenment.org/D9364
This commit is contained in:
parent
17f433c57b
commit
dc1630d496
|
@ -357,9 +357,8 @@ _evas_canvas_efl_object_constructor(Eo *eo_obj, Evas_Public_Data *e)
|
|||
EAPI void
|
||||
evas_free(Evas *eo_e)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!eo_e) return;
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
if (efl_parent_get(eo_e))
|
||||
efl_del(eo_e);
|
||||
else
|
||||
|
@ -1230,9 +1229,7 @@ _evas_canvas_efl_canvas_scene_image_max_size_get(const Eo *eo_e EINA_UNUSED, Eva
|
|||
EAPI void
|
||||
evas_output_framespace_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1251,9 +1248,7 @@ evas_output_framespace_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w,
|
|||
EAPI void
|
||||
evas_output_framespace_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1266,9 +1261,7 @@ evas_output_framespace_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_
|
|||
EAPI void
|
||||
evas_output_method_set(Evas *eo_e, int render_method)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1340,9 +1333,7 @@ evas_output_method_set(Evas *eo_e, int render_method)
|
|||
EAPI int
|
||||
evas_output_method_get(const Evas *eo_e)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return RENDER_METHOD_INVALID;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e, RENDER_METHOD_INVALID);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1352,9 +1343,7 @@ evas_output_method_get(const Evas *eo_e)
|
|||
EAPI void
|
||||
evas_output_size_set(Evas *eo_e, int w, int h)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1382,9 +1371,7 @@ evas_output_size_set(Evas *eo_e, int w, int h)
|
|||
EAPI void
|
||||
evas_output_size_get(const Evas *eo_e, int *w, int *h)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1395,9 +1382,7 @@ evas_output_size_get(const Evas *eo_e, int *w, int *h)
|
|||
EAPI void
|
||||
evas_output_viewport_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1425,9 +1410,7 @@ evas_output_viewport_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, E
|
|||
EAPI void
|
||||
evas_output_viewport_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
|
||||
|
@ -1961,9 +1944,7 @@ evas_font_hinting_can_hint(const Evas *eo_e, Evas_Font_Hinting_Flags hinting)
|
|||
EAPI void
|
||||
evas_font_available_list_free(Evas *eo_e, Eina_List *available)
|
||||
{
|
||||
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
|
||||
evas_font_dir_available_list_free(available);
|
||||
}
|
||||
|
@ -1978,7 +1959,7 @@ _evas_canvas_efl_canvas_scene_group_objects_calculate(Eo *eo_e, Evas_Public_Data
|
|||
EAPI void
|
||||
evas_smart_objects_calculate(Eo *eo_e)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(eo_e);
|
||||
EVAS_TYPE_CHECK(eo_e);
|
||||
evas_call_smarts_calculate(eo_e);
|
||||
}
|
||||
|
||||
|
@ -1991,6 +1972,7 @@ _evas_canvas_efl_canvas_scene_group_objects_calculating_get(const Eo *eo_e EINA_
|
|||
EAPI Eina_Bool
|
||||
evas_smart_objects_calculating_get(const Eo *obj)
|
||||
{
|
||||
EVAS_TYPE_CHECK(obj, EINA_FALSE);
|
||||
return efl_canvas_scene_group_objects_calculating_get(obj);
|
||||
}
|
||||
|
||||
|
@ -2004,18 +1986,21 @@ _evas_canvas_smart_objects_calculate_count_get(const Eo *eo_e EINA_UNUSED, Evas_
|
|||
EAPI Eina_Bool
|
||||
evas_pointer_inside_get(const Evas *obj)
|
||||
{
|
||||
EVAS_TYPE_CHECK(obj, EINA_FALSE);
|
||||
return efl_canvas_pointer_inside_get(obj, NULL);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
evas_pointer_inside_by_device_get(const Evas *obj, Eo *dev)
|
||||
{
|
||||
EVAS_TYPE_CHECK(obj, EINA_FALSE);
|
||||
return efl_canvas_pointer_inside_get(obj, dev);
|
||||
}
|
||||
|
||||
EAPI Eina_List*
|
||||
evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects)
|
||||
{
|
||||
EVAS_TYPE_CHECK(eo_e, NULL);
|
||||
return _efl_canvas_evas_canvas_objects_at_xy_get_helper(eo_e, efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS), x, y, include_pass_events_objects, include_hidden_objects);
|
||||
}
|
||||
/* Internal EO APIs */
|
||||
|
|
|
@ -2864,7 +2864,7 @@ evas_render_pre(Evas *eo_e, Evas_Public_Data *evas)
|
|||
EAPI void
|
||||
evas_render_pending_objects_flush(Evas *eo_e)
|
||||
{
|
||||
Evas_Public_Data *evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
Evas_Public_Data *evas = efl_data_scope_safe_get(eo_e, EVAS_CANVAS_CLASS);
|
||||
EINA_SAFETY_ON_NULL_RETURN(evas);
|
||||
evas_render_pre(eo_e, evas);
|
||||
}
|
||||
|
|
|
@ -517,7 +517,19 @@ OPAQUE_TYPE(Evas_Font_Instance); /* General type for RGBA_Font_Int */
|
|||
#define MAGIC_MAP 0x7575177d
|
||||
#define MAGIC_DEV 0x7d773738
|
||||
|
||||
#define EVAS_TYPE_CHECK(obj, ...) \
|
||||
do { \
|
||||
if (!efl_isa((obj), EVAS_CANVAS_CLASS)) \
|
||||
{ \
|
||||
CRI("non-Evas passed to %s", __func__); \
|
||||
return __VA_ARGS__; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#ifdef EINA_MAGIC_DEBUG
|
||||
|
||||
|
||||
# define MAGIC_CHECK_FAILED(o, t, m) \
|
||||
{evas_debug_error(); \
|
||||
if (!o) evas_debug_input_null(); \
|
||||
|
|
Loading…
Reference in New Issue