Eo: don't allow object override to introduce previously undefined functions.
authorTom Hacohen <tom@stosb.com>
Fri, 9 Sep 2016 09:53:45 +0000 (10:53 +0100)
committerTom Hacohen <tom@stosb.com>
Fri, 9 Sep 2016 10:14:05 +0000 (11:14 +0100)
src/lib/eo/eo.c
src/tests/eo/suite/eo_test_general.c

index 12d4290..08d2bb6 100644 (file)
@@ -648,6 +648,12 @@ _eo_class_funcs_set(Eo_Vtable *vtable, const Efl_Object_Ops *ops, const _Efl_Cla
 
              if (op == EFL_NOOP)
                {
+                  if (override_only)
+                    {
+                       ERR("Class '%s': Tried overriding a previously undefined function.", klass->desc->name);
+                       return EINA_FALSE;
+                    }
+
                   op = op_id;
                   eina_spinlock_take(&_ops_storage_lock);
 #ifndef _WIN32
index 0c522d1..1676faf 100644 (file)
@@ -104,7 +104,7 @@ START_TEST(efl_object_override_tests)
             overrides3,
             EFL_OBJECT_OP_FUNC(simple2_class_beef_get, _simple_obj_override_a_double_set));
    fail_if(!efl_object_override(obj, NULL));
-   fail_if(!efl_object_override(obj, &overrides3));
+   fail_if(efl_object_override(obj, &overrides3));
 
    /* Test override reset */
    fail_if(!efl_object_override(obj, NULL));