FLEXRuntimeSafety.h 888 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //
  2. // FLEXRuntimeSafety.h
  3. // FLEX
  4. //
  5. // Created by Tanner on 3/25/17.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import <objc/runtime.h>
  9. #pragma mark - Classes
  10. extern NSUInteger const kFLEXKnownUnsafeClassCount;
  11. extern const Class * FLEXKnownUnsafeClassList(void);
  12. extern NSSet * FLEXKnownUnsafeClassNames(void);
  13. extern CFSetRef FLEXKnownUnsafeClasses;
  14. static inline BOOL FLEXClassIsSafe(Class cls) {
  15. if (!cls) return NO;
  16. return !CFSetContainsValue(FLEXKnownUnsafeClasses, (__bridge void *)cls);
  17. }
  18. static inline BOOL FLEXClassNameIsSafe(NSString *cls) {
  19. if (!cls) return NO;
  20. NSSet *ignored = FLEXKnownUnsafeClassNames();
  21. return ![ignored containsObject:cls];
  22. }
  23. #pragma mark - Ivars
  24. extern CFSetRef FLEXKnownUnsafeIvars;
  25. static inline BOOL FLEXIvarIsSafe(Ivar ivar) {
  26. if (!ivar) return NO;
  27. return !CFSetContainsValue(FLEXKnownUnsafeIvars, ivar);
  28. }