forked from enlightenment/efl
elm: refactor do not call efl_data_scope_get on a object without data
Summary: A call to efl_data_Scope_get is actually quite dangerous, efl_data_scope_get will return a pointer to a 0 sized segment in memory, this is happening based on how the class data is organized. So in theory you could use this pointer and accidently write to it. This resolves this issue. Reviewers: devilhorns, zmike Reviewed By: zmike Subscribers: cedric, #committers, zmike Tags: #efl Differential Revision: https://phab.enlightenment.org/D6337
This commit is contained in:
parent
271113de0b
commit
b2409153aa
|
@ -494,7 +494,7 @@ _part_is_efl_ui_button_legacy_part(const Eo *obj EINA_UNUSED, const char *part)
|
|||
}
|
||||
|
||||
ELM_PART_OVERRIDE_PARTIAL(efl_ui_button_legacy, EFL_UI_BUTTON_LEGACY, void, _part_is_efl_ui_button_legacy_part)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_button_legacy, EFL_UI_BUTTON_LEGACY, void)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_NO_SD(efl_ui_button_legacy)
|
||||
#include "efl_ui_button_legacy_part.eo.c"
|
||||
|
||||
/* Efl.Part end */
|
||||
|
|
|
@ -551,7 +551,7 @@ _part_is_efl_ui_check_legacy_part(const Eo *obj EINA_UNUSED, const char *part)
|
|||
}
|
||||
|
||||
ELM_PART_OVERRIDE_PARTIAL(efl_ui_check_legacy, EFL_UI_CHECK_LEGACY, void, _part_is_efl_ui_check_legacy_part)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_check_legacy, EFL_UI_CHECK_LEGACY, void)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_NO_SD(efl_ui_check_legacy)
|
||||
#include "efl_ui_check_legacy_part.eo.c"
|
||||
|
||||
/* Efl.Part end */
|
||||
|
|
|
@ -2345,16 +2345,27 @@ _efl_ui_layout_part_efl_ui_cursor_cursor_theme_search_enabled_get(const Eo *obj,
|
|||
return !_efl_ui_layout_part_cursor_engine_only_get(sd, pd->part);
|
||||
}
|
||||
|
||||
#define CONTENT_FULL(part_typename, typename, CLASS, TYPENAME) \
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME)) \
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME)) \
|
||||
ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME))
|
||||
|
||||
|
||||
#define TEXT_FULL(part_typename, typename, CLASS, TYPENAME) \
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME)) \
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME)) \
|
||||
|
||||
|
||||
#define MARKUP_FULL(part_typename, typename, CLASS, TYPENAME) \
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME)) \
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(part_typename, typename, ELM_PART_OVERRIDE_INTERNALS_FETCH(CLASS, TYPENAME)) \
|
||||
|
||||
/* Efl.Ui.Layout.Part_Content */
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(efl_ui_layout_part_content, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(efl_ui_layout_part_content, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(efl_ui_layout_part_content, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
CONTENT_FULL(efl_ui_layout_part_content, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
|
||||
/* Efl.Ui.Layout.Part_Text */
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
TEXT_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
MARKUP_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
|
||||
EOLIAN static const char *
|
||||
_efl_ui_layout_part_text_efl_ui_translatable_translatable_text_get(const Eo *obj, void *_pd EINA_UNUSED, const char **domain)
|
||||
|
@ -2371,13 +2382,9 @@ _efl_ui_layout_part_text_efl_ui_translatable_translatable_text_set(Eo *obj, void
|
|||
}
|
||||
|
||||
/* Efl.Ui.Layout.Part_Legacy */
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
CONTENT_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
TEXT_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
MARKUP_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT_OBJECT, Efl_Ui_Layout_Object_Data)
|
||||
|
||||
EOLIAN static const char *
|
||||
_efl_ui_layout_part_legacy_efl_ui_translatable_translatable_text_get(const Eo *obj, void *_pd EINA_UNUSED, const char **domain)
|
||||
|
|
|
@ -869,7 +869,7 @@ _part_is_efl_ui_progressbar_legacy_part(const Eo *obj EINA_UNUSED, const char *p
|
|||
}
|
||||
|
||||
ELM_PART_OVERRIDE_PARTIAL(efl_ui_progressbar_legacy, EFL_UI_PROGRESSBAR_LEGACY, void, _part_is_efl_ui_progressbar_legacy_part)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_progressbar_legacy, EFL_UI_PROGRESSBAR_LEGACY, void)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_NO_SD(efl_ui_progressbar_legacy)
|
||||
#include "efl_ui_progressbar_legacy_part.eo.c"
|
||||
|
||||
/* Efl.Part for legacy end */
|
||||
|
|
|
@ -469,7 +469,7 @@ _part_is_efl_ui_radio_legacy_part(const Eo *obj EINA_UNUSED, const char *part)
|
|||
}
|
||||
|
||||
ELM_PART_OVERRIDE_PARTIAL(efl_ui_radio_legacy, EFL_UI_RADIO_LEGACY, void, _part_is_efl_ui_radio_legacy_part)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_radio_legacy, EFL_UI_RADIO_LEGACY, void)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_NO_SD(efl_ui_radio_legacy)
|
||||
#include "efl_ui_radio_legacy_part.eo.c"
|
||||
|
||||
/* Efl.Part end */
|
||||
|
|
|
@ -88,89 +88,112 @@ _ ## type ## _efl_part_part_get(const Eo *obj, typedata *priv EINA_UNUSED, const
|
|||
return ELM_PART_IMPLEMENT(TYPE ## _PART_CLASS, obj, part); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_SET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata) \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS);
|
||||
|
||||
#define ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD() \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
void *sd = NULL;
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_SET_FULL(full, type, internals) \
|
||||
EOLIAN static Eina_Bool \
|
||||
_ ## full ## _efl_content_content_set(Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx_Entity *content) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
return _ ## type ## _content_set(pd->obj, sd, pd->part, content); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_GET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_CONTENT_GET_FULL(full, type, internals) \
|
||||
EOLIAN static Efl_Gfx_Entity * \
|
||||
_ ## full ## _efl_content_content_get(const Eo *obj, void *_pd EINA_UNUSED) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
return _ ## type ## _content_get(pd->obj, sd, pd->part); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(full, type, internals) \
|
||||
EOLIAN static Efl_Gfx_Entity * \
|
||||
_ ## full ## _efl_content_content_unset(Eo *obj, void *_pd EINA_UNUSED) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
return _ ## type ## _content_unset(pd->obj, sd, pd->part); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(full, type, internals) \
|
||||
EOLIAN static void \
|
||||
_ ## full ## _efl_text_text_set(Eo *obj, void *_pd EINA_UNUSED, const char *text) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
_ ## type ## _text_set(pd->obj, sd, pd->part, text); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(full, type, internals) \
|
||||
EOLIAN static const char *\
|
||||
_ ## full ## _efl_text_text_get(const Eo *obj, void *_pd EINA_UNUSED) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
return _ ## type ## _text_get(pd->obj, sd, pd->part); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(full, type, internals) \
|
||||
EOLIAN static const char *\
|
||||
_ ## full ## _efl_text_markup_markup_get(const Eo *obj, void *_pd EINA_UNUSED) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
return _ ## type ## _text_markup_get(pd->obj, sd, pd->part); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(full, type, TYPE, typedata) \
|
||||
#define ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(full, type, internals) \
|
||||
EOLIAN static void \
|
||||
_ ## full ## _efl_text_markup_markup_set(Eo *obj, void *_pd EINA_UNUSED, const char *markup) \
|
||||
{ \
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); \
|
||||
typedata *sd = efl_data_scope_get(pd->obj, TYPE ## _CLASS); \
|
||||
internals \
|
||||
_ ## type ## _text_markup_set(pd->obj, sd, pd->part, markup); \
|
||||
}
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_SET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_GET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_UNSET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_SET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_GET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_MARKUP_SET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_MARKUP_GET(type, TYPE, typedata) \
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(type ## _part, type, TYPE, typedata)
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH(TYPE, typedata))
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_SET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_GET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
#define ELM_PART_OVERRIDE_CONTENT_UNSET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_SET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_SET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
#define ELM_PART_OVERRIDE_TEXT_GET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_TEXT_TEXT_GET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
#define ELM_PART_OVERRIDE_MARKUP_SET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_SET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
#define ELM_PART_OVERRIDE_MARKUP_GET_NO_SD(type) \
|
||||
ELM_PART_OVERRIDE_TEXT_MARKUP_GET_FULL(type ## _part, type, ELM_PART_OVERRIDE_INTERNALS_FETCH_NO_SD())
|
||||
|
||||
|
||||
#define ELM_PART_TEXT_DEFAULT_IMPLEMENT(type, typedata) \
|
||||
EOLIAN static void \
|
||||
|
|
Loading…
Reference in New Issue