eo: Check refs in efl_data_scope_safe_get

This makes sure the object is actually still alive and kicking before
returning any data. Otherwise the "safe" word is a bit of an abuse...

Ref T5869

@fix
This commit is contained in:
Jean-Philippe Andre 2017-08-11 10:58:56 +09:00
parent 521e2ab83c
commit e2f8ba7ad9
2 changed files with 2 additions and 0 deletions

View File

@ -2053,6 +2053,7 @@ efl_data_scope_safe_get(const Eo *obj_id, const Efl_Class *klass_id)
if (!obj_id) return NULL;
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, NULL);
EO_CLASS_POINTER_GOTO(klass_id, klass, err_klass);
if (obj->user_refcount <= 0) goto err_klass;
if (_eo_class_mro_has(obj->klass, klass))
ret = _efl_data_scope_safe_get(obj, klass);

View File

@ -337,6 +337,7 @@ START_TEST(efl_data_safe_fetch)
fail_if(efl_data_scope_safe_get(obj, SIMPLE2_CLASS) != NULL);
fail_if(efl_data_scope_safe_get(NULL, EFL_OBJECT_CLASS) != NULL);
efl_unref(obj);
fail_if(efl_data_scope_safe_get(obj, SIMPLE3_CLASS) != NULL);
efl_object_shutdown();
}