efl_ui/text_scroller: fix null derefs

Summary: CIDs 1403890, 1396964, 1396945

Reviewers: cedric, vtorri

Reviewed By: cedric

Subscribers: vtorri, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10447
This commit is contained in:
Mike Blumenkrantz 2019-10-25 09:42:33 -04:00
parent 1adb765879
commit 3638b632c8
1 changed files with 12 additions and 4 deletions

View File

@ -21,6 +21,14 @@
#define EFL_UI_SCROLLER_DATA_GET(o, sd) \
Efl_Ui_Scroller_Data * sd = efl_data_scope_safe_get(o, EFL_UI_SCROLLER_CLASS)
#define EFL_UI_SCROLLER_DATA_GET_OR_RETURN(o, ptr, ...) \
EFL_UI_SCROLLER_DATA_GET(o, ptr); \
if (EINA_UNLIKELY(!ptr)) \
{ \
ERR("No widget data for object %p (%s)", \
o, evas_object_type_get(o)); \
return __VA_ARGS__; \
}
#define MY_CLASS EFL_UI_INTERNAL_TEXT_SCROLLER_CLASS
#define MY_CLASS_PFX efl_ui_internal_text_scroller
@ -55,7 +63,7 @@ _efl_ui_internal_text_scroller_efl_object_constructor(Eo *obj,
Efl_Ui_Internal_Text_Scroller_Data *sd EINA_UNUSED)
{
obj = efl_constructor(efl_super(obj, MY_CLASS));
//EFL_UI_SCROLLER_DATA_GET(obj, psd);
//EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, psd, NULL);
efl_ui_scrollbar_bar_mode_set(obj,
EFL_UI_SCROLLBAR_MODE_OFF, EFL_UI_SCROLLBAR_MODE_OFF);
@ -71,7 +79,7 @@ _efl_ui_internal_text_scroller_efl_canvas_group_group_calculate(Eo *obj,
Evas_Coord vmw = 0, vmh = 0;
efl_canvas_group_need_recalculate_set(obj, EINA_FALSE);
EFL_UI_SCROLLER_DATA_GET(obj, psd);
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, psd);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
@ -162,7 +170,7 @@ _efl_ui_internal_text_scroller_scroller_mode_set(Eo *obj,
Efl_Ui_Internal_Text_Scroller_Data *sd,
Efl_Ui_Text_Scroller_Mode mode)
{
EFL_UI_SCROLLER_DATA_GET(obj, psd);
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, psd);
sd->mode = mode;
if (mode == EFL_UI_TEXT_SCROLLER_MODE_MULTILINE)
{
@ -180,7 +188,7 @@ EOLIAN static Eo *
_efl_ui_internal_text_scroller_viewport_clip_get(const Eo *obj,
Efl_Ui_Internal_Text_Scroller_Data *sd EINA_UNUSED)
{
EFL_UI_SCROLLER_DATA_GET(obj, psd);
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, psd, NULL);
return evas_object_clip_get(psd->pan_obj);
}