summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>2016-12-19 19:24:45 +0100
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>2017-04-19 13:31:59 +0200
commit20a7d2f8ce3e7ad675277e92f45e7789031b7e2f (patch)
treeba9a3742fdebe737ab634280aec3e519d7b204d1
parentacc8b567edb2c04fc774fc85902595c5fe0104d8 (diff)
downloadefl-20a7d2f8ce3e7ad675277e92f45e7789031b7e2f.tar.gz
efl_ui_focus_manager: be more secure
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/lib/elementary/efl_ui_focus_manager.c b/src/lib/elementary/efl_ui_focus_manager.c
index cdf58bcfad..82a301cc9f 100644
--- a/src/lib/elementary/efl_ui_focus_manager.c
+++ b/src/lib/elementary/efl_ui_focus_manager.c
@@ -516,6 +516,11 @@ _efl_ui_focus_manager_register_logical(Eo *obj, Efl_Ui_Focus_Manager_Data *pd, E
EINA_SAFETY_ON_NULL_RETURN_VAL(child, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, EINA_FALSE);
+ if (redirect)
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(redirect, MY_CLASS), EINA_FALSE);
+
+ F_DBG("Manager: %p register %p %p %p", obj, child, parent, redirect);
+
pnode = node_get(obj, pd, parent);
if (!pnode) return EINA_FALSE;
@@ -538,6 +543,11 @@ _efl_ui_focus_manager_register(Eo *obj, Efl_Ui_Focus_Manager_Data *pd, Efl_Ui_Fo
EINA_SAFETY_ON_NULL_RETURN_VAL(child, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, EINA_FALSE);
+ if (redirect)
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(redirect, MY_CLASS), EINA_FALSE);
+
+ F_DBG("Manager: %p register %p %p %p", obj, child, parent, redirect);
+
pnode = node_get(obj, pd, parent);
if (!pnode) return EINA_FALSE;
@@ -562,6 +572,9 @@ _efl_ui_focus_manager_update_redirect(Eo *obj, Efl_Ui_Focus_Manager_Data *pd, Ef
Node *node = node_get(obj, pd, child);
if (!node) return EINA_FALSE;
+ if (redirect)
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(redirect, MY_CLASS), EINA_FALSE);
+
node->redirect_manager = redirect;
return EINA_TRUE;
@@ -647,6 +660,9 @@ _efl_ui_focus_manager_unregister(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Data
if (!node) return;
+ F_DBG("Manager: %p unregister %p", obj, child);
+
+
//remove the object from the stack if it hasnt dont that until now
//after this its not at the top anymore
//elm_widget_focus_set(node->focusable, EINA_FALSE);