Skip to content

Commit 94cfd7c

Browse files
committed
Intermittent crash on start on iOS 11 fix
* Crash was due to a bad pointer getting the supper class of the last entry from objc_getClassList * The 2nd call can sometimes result in the last entry in the array not being initialized fully on iOS 11 if more classes are still being loaded into memory.
1 parent e09d263 commit 94cfd7c

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

iOS_SDK/OneSignalSDK/Source/OneSignalSelectorHelpers.m

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,22 +90,22 @@ void injectToProperClass(SEL newSel, SEL makeLikeSel, NSArray* delegateSubclasse
9090
}
9191

9292
NSArray* ClassGetSubclasses(Class parentClass) {
93-
9493
int numClasses = objc_getClassList(NULL, 0);
95-
Class *classes = NULL;
94+
Class *classes = (Class*)malloc(sizeof(Class) * numClasses);
9695

97-
classes = (Class *)malloc(sizeof(Class) * numClasses);
98-
numClasses = objc_getClassList(classes, numClasses);
96+
objc_getClassList(classes, numClasses);
9997

10098
NSMutableArray *result = [NSMutableArray array];
99+
101100
for (NSInteger i = 0; i < numClasses; i++) {
102101
Class superClass = classes[i];
102+
103103
while(superClass && superClass != parentClass) {
104104
superClass = class_getSuperclass(superClass);
105105
}
106106

107-
if (superClass == nil) continue;
108-
[result addObject:classes[i]];
107+
if (superClass)
108+
[result addObject:classes[i]];
109109
}
110110

111111
free(classes);

0 commit comments

Comments
 (0)