From 028a312ecd7a6dc8fd45146ce911d9c4543daf02 Mon Sep 17 00:00:00 2001 From: theraven Date: Tue, 5 Jan 2010 13:52:35 +0000 Subject: [PATCH] Fixed bugs found by Mizuki. --- runtime.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/runtime.c b/runtime.c index bbea307..02497af 100644 --- a/runtime.c +++ b/runtime.c @@ -140,10 +140,18 @@ BOOL class_addIvar(Class cls, if (class_getInstanceVariable(cls, name) != NULL) { return NO; } - ivarlist->ivar_count++; - // objc_ivar_list contains one ivar. Others follow it. - cls->ivars = objc_realloc(ivarlist, sizeof(struct objc_ivar_list) - + (ivarlist->ivar_count - 1) * sizeof(struct objc_ivar)); + if (NULL == ivarlist) + { + cls->ivars = objc_malloc(sizeof(struct objc_ivar_list)); + cls->ivars->ivar_count = 1; + } + else + { + ivarlist->ivar_count++; + // objc_ivar_list contains one ivar. Others follow it. + cls->ivars = objc_realloc(ivarlist, sizeof(struct objc_ivar_list) + + (ivarlist->ivar_count - 1) * sizeof(struct objc_ivar)); + } Ivar ivar = &cls->ivars->ivar_list[cls->ivars->ivar_count - 1]; ivar->ivar_name = strdup(name); @@ -176,7 +184,7 @@ BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types) cls->methods = methods; methods->method_count = 1; - methods->method_list[0].method_name = sel_get_typed_uid(methodName, types); + methods->method_list[0].method_name = sel_register_typed_name(methodName, types); methods->method_list[0].method_types = strdup(types); methods->method_list[0].method_imp = (objc_imp_gnu)imp; @@ -349,6 +357,7 @@ size_t class_getInstanceSize(Class cls) Ivar class_getInstanceVariable(Class cls, const char* name) { struct objc_ivar_list *ivarlist = cls->ivars; + if (NULL == ivarlist) { return NULL; } for (int i=0 ; iivar_count ; i++) {