Make sure the SDK doesn't crash comparing data when the server returns invalid data

This commit is contained in:
Andreas Linde 2013-04-23 18:12:50 +02:00
parent 79442a5a0a
commit feeb8ef4b1

View File

@ -57,7 +57,6 @@
#pragma mark - NSObject #pragma mark - NSObject
- (BOOL)isEqual:(id)other { - (BOOL)isEqual:(id)other {
if (other == self) if (other == self)
return YES; return YES;
@ -66,24 +65,56 @@
return [self isEqualToAppVersionMetaInfo:other]; return [self isEqualToAppVersionMetaInfo:other];
} }
- (BOOL)isEqualComparingString:(NSString *)stringA withString:(NSString *)stringB {
if ([stringA isKindOfClass:[NSString class]] && [stringB isKindOfClass:[NSString class]]) {
return [stringA isEqualToString:stringB];
}
return NO;
}
- (BOOL)isEqualComparingNumber:(NSNumber *)numberA withNumber:(NSNumber *)numberB {
if ([numberA isKindOfClass:[NSNumber class]] && [numberB isKindOfClass:[NSNumber class]]) {
return [numberA isEqualToNumber:numberB];
}
return NO;
}
- (BOOL)isEqualComparingDate:(NSDate *)dateA withDate:(NSDate *)dateB {
if ([dateA isKindOfClass:[NSDate class]] && [dateB isKindOfClass:[NSDate class]]) {
return [dateA isEqualToDate:dateB];
}
return NO;
}
- (BOOL)isEqualComparingDictionary:(NSDictionary *)dictA withDate:(NSDictionary *)dictB {
if ([dictA isKindOfClass:[NSDictionary class]] && [dictB isKindOfClass:[NSDictionary class]]) {
return [dictA isEqualToDictionary:dictB];
}
return NO;
}
- (BOOL)isEqualToAppVersionMetaInfo:(BITAppVersionMetaInfo *)anAppVersionMetaInfo { - (BOOL)isEqualToAppVersionMetaInfo:(BITAppVersionMetaInfo *)anAppVersionMetaInfo {
if (self == anAppVersionMetaInfo) if (self == anAppVersionMetaInfo)
return YES; return YES;
if (self.name != anAppVersionMetaInfo.name && ![self.name isEqualToString:anAppVersionMetaInfo.name]) if (self.name != anAppVersionMetaInfo.name && ![self isEqualComparingString:self.name withString:anAppVersionMetaInfo.name])
return NO; return NO;
if (self.version != anAppVersionMetaInfo.version && ![self.version isEqualToString:anAppVersionMetaInfo.version]) if (self.version != anAppVersionMetaInfo.version && ![self isEqualComparingString:self.version withString:anAppVersionMetaInfo.version])
return NO; return NO;
if (self.shortVersion != anAppVersionMetaInfo.shortVersion && ![self.shortVersion isEqualToString:anAppVersionMetaInfo.shortVersion]) if (self.shortVersion != anAppVersionMetaInfo.shortVersion && ![self isEqualComparingString:self.shortVersion withString:anAppVersionMetaInfo.shortVersion])
return NO; return NO;
if (self.notes != anAppVersionMetaInfo.notes && ![self.notes isEqualToString:anAppVersionMetaInfo.notes]) if (self.notes != anAppVersionMetaInfo.notes && ![self isEqualComparingString:self.notes withString:anAppVersionMetaInfo.notes])
return NO; return NO;
if (self.date != anAppVersionMetaInfo.date && ![self.date isEqualToDate:anAppVersionMetaInfo.date]) if (self.date != anAppVersionMetaInfo.date && ![self isEqualComparingDate:self.date withDate:anAppVersionMetaInfo.date])
return NO; return NO;
if (self.size != anAppVersionMetaInfo.size && ![self.size isEqualToNumber:anAppVersionMetaInfo.size]) if (self.size != anAppVersionMetaInfo.size && ![self isEqualComparingNumber:self.size withNumber:anAppVersionMetaInfo.size])
return NO; return NO;
if (self.mandatory != anAppVersionMetaInfo.mandatory && ![self.mandatory isEqualToNumber:anAppVersionMetaInfo.mandatory]) if (self.mandatory != anAppVersionMetaInfo.mandatory && ![self isEqualComparingNumber:self.mandatory withNumber:anAppVersionMetaInfo.mandatory])
return NO; return NO;
if (![self.uuids isEqualToDictionary:anAppVersionMetaInfo.uuids]) if (![self isEqualComparingDictionary:self.uuids withDate:anAppVersionMetaInfo.uuids])
return NO; return NO;
return YES; return YES;
} }