From 8987a0d90645a2bb6aaa98ee603d82af9b82e19b Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Tue, 30 Jan 2024 14:01:59 +0000 Subject: [PATCH] fix: replaced objc_getClassList with objc_copyClassList --- ContentstackPersistence/SyncManager.m | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/ContentstackPersistence/SyncManager.m b/ContentstackPersistence/SyncManager.m index 50559bd..24de292 100755 --- a/ContentstackPersistence/SyncManager.m +++ b/ContentstackPersistence/SyncManager.m @@ -419,18 +419,22 @@ -(id)parseObject:(id)object forClass:(Class)class { NSArray *classConformsProtocol(Protocol* protocol, Class superClass) { NSMutableArray *classesArray = [NSMutableArray array]; - int numberOfClasses = objc_getClassList(NULL, 0); - Class *classList = (Class *)malloc(numberOfClasses * sizeof(Class)); - numberOfClasses = objc_getClassList(classList, numberOfClasses); - for (int idx = 0; idx < numberOfClasses; idx++) - { - Class class = classList[idx]; - if (class_getClassMethod(class, @selector(superclass)) && [superClass isEqual: [class superclass]] && class_getClassMethod(class, @selector(conformsToProtocol:)) && [class conformsToProtocol:protocol]) - { - [classesArray addObject:class]; + // Get the class list + unsigned int numberOfClasses; + Class *classList = objc_copyClassList(&numberOfClasses); + + for (unsigned int idx = 0; idx < numberOfClasses; idx++) { + Class currentClass = classList[idx]; + // Check if it's a valid Obj-c class + if (class_respondsToSelector(currentClass, @selector(conformsToProtocol:)) && class_respondsToSelector(currentClass, @selector(superclass))) { + // Check superclass and protocol conformity + if ([superClass isEqual:[currentClass superclass]] && [currentClass conformsToProtocol:protocol]) { + [classesArray addObject:currentClass]; + } } } + free(classList); return classesArray; }