Fix NPE using mock for unknown database objects.

pull/1/head
Matthew Chen 7 years ago
parent 79dcbf8a79
commit 060e0fd062

@ -192,7 +192,7 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
#pragma mark - #pragma mark -
@interface OWSUnknownDBObject : NSObject <NSCoding> @interface OWSUnknownDBObject : TSYapDatabaseObject <NSCoding>
@end @end
@ -205,17 +205,42 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
*/ */
@implementation OWSUnknownDBObject @implementation OWSUnknownDBObject
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder - (void)encodeWithCoder:(NSCoder *)aCoder
{
OWSProdLogAndFail(@"%@ Tried to save object from unknown collection", self.logTag);
return [super encodeWithCoder:aCoder];
}
- (nullable instancetype)initWithCoder:(NSCoder *)coder
{ {
// We return self instead of, e.g. nil, to avoid a crash when YapDB enumerates self = [super initWithCoder:coder];
// all old objects when building a DB extension. if (!self) {
return self;
}
return self; return self;
} }
- (void)encodeWithCoder:(NSCoder *)aCoder - (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
OWSRaiseException( OWSProdLogAndFail(@"%@ Tried to save unknown object", self.logTag);
@"OWSStorageExceptionName_SaveToUnknownCollection", @"Tried to save object from unknown collection");
// No-op.
}
- (void)touchWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSProdLogAndFail(@"%@ Tried to touch unknown object", self.logTag);
// No-op.
}
- (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSProdLogAndFail(@"%@ Tried to remove unknown object", self.logTag);
// No-op.
} }
@end @end
@ -457,7 +482,8 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
return ^id(NSString __unused *collection, NSString __unused *key, NSData *data) { return ^id(NSString __unused *collection, NSString __unused *key, NSData *data) {
if (!data || data.length <= 0) { if (!data || data.length <= 0) {
return nil; OWSProdLogAndFail(@"%@ can't deserializing null object: %@", self.logTag, collection);
return [OWSUnknownDBObject new];
} }
@try { @try {

Loading…
Cancel
Save