Index: src/object.c ================================================================== --- src/object.c +++ src/object.c @@ -91,10 +91,13 @@ void* cfw_ref(void *ptr) { CFWObject *obj = ptr; + + if (obj == NULL) + return NULL; obj->ref_cnt++; return obj; } @@ -101,19 +104,25 @@ void cfw_unref(void *ptr) { CFWObject *obj = ptr; + + if (obj == NULL) + return NULL; if (--obj->ref_cnt == 0) cfw_free(obj); } void cfw_free(void *ptr) { CFWObject *obj = ptr; + + if (obj == NULL) + return NULL; if (obj->cls->dtor != NULL) obj->cls->dtor(obj); free(obj); @@ -121,26 +130,38 @@ CFWClass* cfw_class(void *ptr) { CFWObject *obj = ptr; + + if (obj == NULL) + return NULL; return obj->cls; } bool cfw_is(void *ptr, CFWClass *cls) { CFWObject *obj = ptr; + + if (obj == NULL || cls == NULL) + return false; return (obj->cls == cls); } bool cfw_equal(void *ptr1, void *ptr2) { CFWObject *obj1 = ptr1, *obj2 = ptr2; + + if (obj1 == obj2) + return true; + + if (obj1 == NULL || obj2 == NULL) + return false; if (obj1->cls->equal != NULL) { return obj1->cls->equal(obj1, obj2); } else return (obj1 == obj2); @@ -148,10 +169,13 @@ uint32_t cfw_hash(void *ptr) { CFWObject *obj = ptr; + + if (obj == NULL) + return 0; if (obj->cls->hash != NULL) return obj->cls->hash(obj); return (uint32_t)(uintptr_t)ptr; @@ -159,10 +183,13 @@ void* cfw_copy(void *ptr) { CFWObject *obj = ptr; + + if (obj == NULL) + return NULL; if (obj->cls->copy != NULL) return obj->cls->copy(obj); return NULL;