Merge branch 'mkirk/log-owsfail'
This commit is contained in:
commit
73174d7943
@ -21,12 +21,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (void)loadForDisplay
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
}
|
||||
|
||||
- (CGSize)cellSize
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return CGSizeZero;
|
||||
}
|
||||
|
||||
@ -2147,7 +2147,7 @@ typedef enum : NSUInteger {
|
||||
return;
|
||||
}
|
||||
if (![self.thread isKindOfClass:[TSContactThread class]]) {
|
||||
OWSFail(@"%@ unexpected thread: %@ in %s", self.logTag, self.thread, __PRETTY_FUNCTION__);
|
||||
OWSFail(@"%@ unexpected thread: %@ in %s", self.logTag, [self.thread class], __PRETTY_FUNCTION__);
|
||||
return;
|
||||
}
|
||||
TSContactThread *contactThread = (TSContactThread *)self.thread;
|
||||
@ -2167,7 +2167,7 @@ typedef enum : NSUInteger {
|
||||
{
|
||||
// This is accessed via the contact offer. Group whitelisting happens via a different interaction.
|
||||
if (![self.thread isKindOfClass:[TSContactThread class]]) {
|
||||
OWSFail(@"%@ unexpected thread: %@ in %s", self.logTag, self.thread, __PRETTY_FUNCTION__);
|
||||
OWSFail(@"%@ unexpected thread: %@ in %s", self.logTag, [self.thread class], __PRETTY_FUNCTION__);
|
||||
return;
|
||||
}
|
||||
TSContactThread *contactThread = (TSContactThread *)self.thread;
|
||||
@ -2865,12 +2865,10 @@ typedef enum : NSUInteger {
|
||||
NSError *isDirectoryError;
|
||||
[url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&isDirectoryError];
|
||||
if (isDirectoryError) {
|
||||
OWSFail(@"%@ Determining if picked document at url: %@ was a directory failed with error: %@",
|
||||
self.logTag,
|
||||
url,
|
||||
isDirectoryError);
|
||||
OWSFail(
|
||||
@"%@ Determining if picked document was a directory failed with error: %@", self.logTag, isDirectoryError);
|
||||
} else if ([isDirectory boolValue]) {
|
||||
DDLogInfo(@"%@ User picked directory at url: %@", self.logTag, url);
|
||||
DDLogInfo(@"%@ User picked directory.", self.logTag);
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[OWSAlerts
|
||||
@ -2886,7 +2884,7 @@ typedef enum : NSUInteger {
|
||||
|
||||
NSString *filename = url.lastPathComponent;
|
||||
if (!filename) {
|
||||
OWSFail(@"%@ Unable to determine filename from url: %@", self.logTag, url);
|
||||
OWSFail(@"%@ Unable to determine filename", self.logTag);
|
||||
filename = NSLocalizedString(
|
||||
@"ATTACHMENT_DEFAULT_FILENAME", @"Generic filename for an attachment with no known name");
|
||||
}
|
||||
@ -2895,7 +2893,7 @@ typedef enum : NSUInteger {
|
||||
OWSAssert(filename);
|
||||
DataSource *_Nullable dataSource = [DataSourcePath dataSourceWithURL:url shouldDeleteOnDeallocation:NO];
|
||||
if (!dataSource) {
|
||||
OWSFail(@"%@ attachment data was unexpectedly empty for picked document url: %@", self.logTag, url);
|
||||
OWSFail(@"%@ attachment data was unexpectedly empty for picked document", self.logTag);
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[OWSAlerts showAlertWithTitle:NSLocalizedString(@"ATTACHMENT_PICKER_DOCUMENTS_FAILED_ALERT_TITLE",
|
||||
@ -3020,7 +3018,7 @@ typedef enum : NSUInteger {
|
||||
[assetslibrary assetForURL:referenceURL
|
||||
resultBlock:resultblock
|
||||
failureBlock:^(NSError *error) {
|
||||
OWSFail(@"Error retrieving filename for asset: %@", error);
|
||||
OWSCFail(@"Error retrieving filename for asset: %@", error);
|
||||
}];
|
||||
}
|
||||
|
||||
@ -3378,7 +3376,7 @@ typedef enum : NSUInteger {
|
||||
if (hasMalformedRowChange) {
|
||||
// These errors seems to be very rare; they can only be reproduced
|
||||
// using the more extreme actions in the debug UI.
|
||||
OWSProdLogAndFail(@"%@ hasMalformedRowChange", self.logTag);
|
||||
OWSFail(@"%@ hasMalformedRowChange", self.logTag);
|
||||
[self resetContentAndLayout];
|
||||
[self updateLastVisibleTimestamp];
|
||||
[self scrollToBottomAnimated:NO];
|
||||
@ -4853,16 +4851,19 @@ typedef enum : NSUInteger {
|
||||
TSInteraction *interaction =
|
||||
[viewTransaction objectAtRow:row inSection:0 withMappings:self.messageMappings];
|
||||
if (!interaction) {
|
||||
OWSFail(@"%@ missing interaction in message mappings: %zd / %zd.", self.logTag, row, count);
|
||||
OWSFail(@"%@ missing interaction in message mappings: %lu / %lu.",
|
||||
self.logTag,
|
||||
(unsigned long)row,
|
||||
(unsigned long)count);
|
||||
// TODO: Add analytics.
|
||||
continue;
|
||||
}
|
||||
if (!interaction.uniqueId) {
|
||||
OWSFail(@"%@ invalid interaction in message mappings: %zd / %zd: %@.",
|
||||
OWSFail(@"%@ invalid interaction in message mappings: %lu / %lu: %@.",
|
||||
self.logTag,
|
||||
row,
|
||||
count,
|
||||
interaction.description);
|
||||
(unsigned long)row,
|
||||
(unsigned long)count,
|
||||
interaction);
|
||||
// TODO: Add analytics.
|
||||
continue;
|
||||
}
|
||||
@ -5136,7 +5137,7 @@ typedef enum : NSUInteger {
|
||||
- (nullable ConversationViewItem *)viewItemForIndex:(NSInteger)index
|
||||
{
|
||||
if (index < 0 || index >= (NSInteger)self.viewItems.count) {
|
||||
OWSFail(@"%@ Invalid view item index: %zd", self.logTag, index);
|
||||
OWSFail(@"%@ Invalid view item index: %lu", self.logTag, (unsigned long)index);
|
||||
return nil;
|
||||
}
|
||||
return self.viewItems[(NSUInteger)index];
|
||||
|
||||
@ -716,7 +716,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
|
||||
}
|
||||
NSData *data = [NSData dataWithContentsOfURL:[self.attachmentStream mediaURL]];
|
||||
if (!data) {
|
||||
OWSFail(@"%@ Could not load attachment data: %@", self.logTag, [self.attachmentStream mediaURL]);
|
||||
OWSFail(@"%@ Could not load attachment data", self.logTag);
|
||||
return;
|
||||
}
|
||||
[UIPasteboard.generalPasteboard setData:data forPasteboardType:utiType];
|
||||
@ -817,7 +817,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
|
||||
case OWSMessageCellType_AnimatedImage: {
|
||||
NSData *data = [NSData dataWithContentsOfURL:[self.attachmentStream mediaURL]];
|
||||
if (!data) {
|
||||
OWSFail(@"%@ Could not load image data: %@", self.logTag, [self.attachmentStream mediaURL]);
|
||||
OWSFail(@"%@ Could not load image data", self.logTag);
|
||||
return;
|
||||
}
|
||||
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
|
||||
|
||||
@ -39,7 +39,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
OWSAssert(success);
|
||||
OWSAssert(failure);
|
||||
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
success();
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "DebugUIPage.h"
|
||||
|
||||
@ -398,7 +398,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (NSString *)stringForDate:(nullable NSDate *)date
|
||||
{
|
||||
if (date == nil) {
|
||||
OWSProdLogAndFail(@"%@ date was unexpectedly nil", self.logTag);
|
||||
OWSFail(@"%@ date was unexpectedly nil", self.logTag);
|
||||
return @"";
|
||||
}
|
||||
|
||||
|
||||
@ -262,7 +262,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
if (![fileManager fileExistsAtPath:[self.attachmentUrl path]]) {
|
||||
OWSFail(@"%@ Missing video file: %@", self.logTag, self.attachmentStream.mediaURL);
|
||||
OWSFail(@"%@ Missing video file", self.logTag);
|
||||
}
|
||||
|
||||
OWSVideoPlayer *player = [[OWSVideoPlayer alloc] initWithUrl:self.attachmentUrl];
|
||||
|
||||
@ -367,16 +367,22 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[contents addSection:section];
|
||||
}
|
||||
contents.sectionForSectionIndexTitleBlock = ^NSInteger(NSString *_Nonnull title, NSInteger index) {
|
||||
typeof(self) strongSelf = weakSelf;
|
||||
if (!strongSelf) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Offset the collation section to account for the noncollated sections.
|
||||
NSInteger sectionIndex = [self.collation sectionForSectionIndexTitleAtIndex:index] + noncollatedSections;
|
||||
NSInteger sectionIndex =
|
||||
[strongSelf.collation sectionForSectionIndexTitleAtIndex:index] + noncollatedSections;
|
||||
if (sectionIndex < 0) {
|
||||
// Sentinal in case we change our section ordering in a surprising way.
|
||||
OWSFail(@"Unexpected negative section index");
|
||||
OWSCFail(@"Unexpected negative section index");
|
||||
return 0;
|
||||
}
|
||||
if (sectionIndex >= (NSInteger)contents.sections.count) {
|
||||
// Sentinal in case we change our section ordering in a surprising way.
|
||||
OWSFail(@"Unexpectedly large index");
|
||||
OWSCFail(@"Unexpectedly large index");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -384,7 +390,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
};
|
||||
contents.sectionIndexTitlesForTableViewBlock = ^NSArray<NSString *> *_Nonnull
|
||||
{
|
||||
return self.collation.sectionTitles;
|
||||
typeof(self) strongSelf = weakSelf;
|
||||
if (!strongSelf) {
|
||||
return @[];
|
||||
}
|
||||
|
||||
return strongSelf.collation.sectionTitles;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -931,7 +931,7 @@ const CGFloat kIconViewLength = 24;
|
||||
return;
|
||||
}
|
||||
if (![self.thread isKindOfClass:[TSContactThread class]]) {
|
||||
OWSFail(@"%@ unexpected thread: %@ in %s", self.logTag, self.thread, __PRETTY_FUNCTION__);
|
||||
OWSFail(@"%@ unexpected thread: %@ in %s", self.logTag, [self.thread class], __PRETTY_FUNCTION__);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -208,8 +208,7 @@
|
||||
OWSAssert(message);
|
||||
|
||||
if (!thread) {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ unexpected notification not associated with a thread: %@.", self.logTag, [message class]);
|
||||
OWSFail(@"%@ unexpected notification not associated with a thread: %@.", self.logTag, [message class]);
|
||||
[self notifyUserForThreadlessErrorMessage:message transaction:transaction];
|
||||
return;
|
||||
}
|
||||
|
||||
@ -134,7 +134,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
DDLogInfo(@"%@ received content-available push", self.logTag);
|
||||
|
||||
// If we want to re-introduce silent pushes we can remove this assert.
|
||||
OWSProdLogAndFail(@"Unexpected content-available push.");
|
||||
OWSFail(@"Unexpected content-available push.");
|
||||
|
||||
[AppReadiness runNowOrWhenAppIsReady:^{
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 20 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
@ -146,7 +146,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
- (void)presentOncePerActivationConversationWithThreadId:(NSString *)threadId
|
||||
{
|
||||
if (self.hasPresentedConversationSinceLastDeactivation) {
|
||||
OWSProdLogAndFail(@"%@ in %s refusing to present conversation: %@ multiple times.",
|
||||
OWSFail(@"%@ in %s refusing to present conversation: %@ multiple times.",
|
||||
self.logTag,
|
||||
__PRETTY_FUNCTION__,
|
||||
threadId);
|
||||
@ -167,7 +167,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
if (threadId) {
|
||||
[self presentOncePerActivationConversationWithThreadId:threadId];
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ threadId was unexpectedly nil in %s", self.logTag, __PRETTY_FUNCTION__);
|
||||
OWSFail(@"%@ threadId was unexpectedly nil in %s", self.logTag, __PRETTY_FUNCTION__);
|
||||
}
|
||||
|
||||
// We only want to receive a single local notification per launch.
|
||||
@ -275,18 +275,16 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
if (threadId) {
|
||||
[self presentOncePerActivationConversationWithThreadId:threadId];
|
||||
} else {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ threadId was unexpectedly nil in action with identifier: %@", self.logTag, identifier);
|
||||
OWSFail(@"%@ threadId was unexpectedly nil in action with identifier: %@", self.logTag, identifier);
|
||||
}
|
||||
completionHandler();
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ Unhandled action with identifier: %@", self.logTag, identifier);
|
||||
OWSFail(@"%@ Unhandled action with identifier: %@", self.logTag, identifier);
|
||||
NSString *threadId = notification.userInfo[Signal_Thread_UserInfo_Key];
|
||||
if (threadId) {
|
||||
[self presentOncePerActivationConversationWithThreadId:threadId];
|
||||
} else {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ threadId was unexpectedly nil in action with identifier: %@", self.logTag, identifier);
|
||||
OWSFail(@"%@ threadId was unexpectedly nil in action with identifier: %@", self.logTag, identifier);
|
||||
}
|
||||
completionHandler();
|
||||
}
|
||||
@ -296,7 +294,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
||||
{
|
||||
NSString *threadId = userInfo[Signal_Thread_UserInfo_Key];
|
||||
if (!threadId) {
|
||||
OWSProdLogAndFail(@"%@ missing thread id for notification.", self.logTag);
|
||||
OWSFail(@"%@ missing thread id for notification.", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -492,7 +492,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
||||
id ext = [transaction ext:TSLazyRestoreAttachmentsDatabaseViewExtensionName];
|
||||
if (!ext) {
|
||||
OWSProdLogAndFail(@"%@ Could not load database view.", self.logTag);
|
||||
OWSFail(@"%@ Could not load database view.", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -500,7 +500,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
usingBlock:^(
|
||||
NSString *collection, NSString *key, id object, NSUInteger index, BOOL *stop) {
|
||||
if (![object isKindOfClass:[TSAttachmentStream class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected object: %@ in collection:%@",
|
||||
OWSFail(@"%@ Unexpected object: %@ in collection:%@",
|
||||
self.logTag,
|
||||
[object class],
|
||||
collection);
|
||||
@ -508,7 +508,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
TSAttachmentStream *attachmentStream = object;
|
||||
if (!attachmentStream.lazyRestoreFragment) {
|
||||
OWSProdLogAndFail(@"%@ Invalid object: %@ in collection:%@",
|
||||
OWSFail(@"%@ Invalid object: %@ in collection:%@",
|
||||
self.logTag,
|
||||
[object class],
|
||||
collection);
|
||||
@ -526,7 +526,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
||||
id ext = [transaction ext:TSLazyRestoreAttachmentsDatabaseViewExtensionName];
|
||||
if (!ext) {
|
||||
OWSProdLogAndFail(@"%@ Could not load database view.", self.logTag);
|
||||
OWSFail(@"%@ Could not load database view.", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -117,7 +117,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSData *_Nullable data = [NSKeyedArchiver archivedDataWithRootObject:object];
|
||||
if (!data) {
|
||||
OWSProdLogAndFail(@"%@ couldn't serialize database object: %@", self.logTag, [object class]);
|
||||
OWSFail(@"%@ couldn't serialize database object: %@", self.logTag, [object class]);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *error;
|
||||
SignalIOSProtoBackupSnapshotBackupEntity *_Nullable entity = [entityBuilder buildAndReturnError:&error];
|
||||
if (!entity || error) {
|
||||
OWSProdLogAndFail(@"%@ couldn't build proto: %@", self.logTag, error);
|
||||
OWSFail(@"%@ couldn't build proto: %@", self.logTag, error);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -165,7 +165,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *error;
|
||||
NSData *_Nullable uncompressedData = [self.backupSnapshotBuilder buildSerializedDataAndReturnError:&error];
|
||||
if (!uncompressedData || error) {
|
||||
OWSProdLogAndFail(@"%@ couldn't serialize proto: %@", self.logTag, error);
|
||||
OWSFail(@"%@ couldn't serialize proto: %@", self.logTag, error);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -173,7 +173,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
self.backupSnapshotBuilder = nil;
|
||||
self.cachedItemCount = 0;
|
||||
if (!uncompressedData) {
|
||||
OWSProdLogAndFail(@"%@ couldn't convert database snapshot to data.", self.logTag);
|
||||
OWSFail(@"%@ couldn't convert database snapshot to data.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
OWSBackupEncryptedItem *_Nullable encryptedItem = [self.backupIO encryptDataAsTempFile:compressedData];
|
||||
if (!encryptedItem) {
|
||||
OWSProdLogAndFail(@"%@ couldn't encrypt database snapshot.", self.logTag);
|
||||
OWSFail(@"%@ couldn't encrypt database snapshot.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -256,7 +256,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSString *attachmentsDirPath = [TSAttachmentStream attachmentsFolder];
|
||||
if (![self.attachmentFilePath hasPrefix:attachmentsDirPath]) {
|
||||
DDLogError(@"%@ attachment has unexpected path.", self.logTag);
|
||||
OWSFail(@"%@ attachment has unexpected path: %@", self.logTag, self.attachmentFilePath);
|
||||
return NO;
|
||||
}
|
||||
@ -269,7 +268,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
OWSBackupEncryptedItem *_Nullable encryptedItem = [self.backupIO encryptFileAsTempFile:self.attachmentFilePath];
|
||||
if (!encryptedItem) {
|
||||
DDLogError(@"%@ attachment could not be encrypted.", self.logTag);
|
||||
OWSFail(@"%@ attachment could not be encrypted: %@", self.logTag, self.attachmentFilePath);
|
||||
return NO;
|
||||
}
|
||||
@ -401,7 +399,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
DDLogVerbose(@"%@ %s", self.logTag, __PRETTY_FUNCTION__);
|
||||
|
||||
if (![self ensureJobTempDir]) {
|
||||
OWSProdLogAndFail(@"%@ Could not create jobTempDirPath.", self.logTag);
|
||||
OWSFail(@"%@ Could not create jobTempDirPath.", self.logTag);
|
||||
return completion(NO);
|
||||
}
|
||||
|
||||
@ -473,7 +471,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
YapDatabaseConnection *_Nullable dbConnection = self.primaryStorage.newDatabaseConnection;
|
||||
if (!dbConnection) {
|
||||
OWSProdLogAndFail(@"%@ Could not create dbConnection.", self.logTag);
|
||||
OWSFail(@"%@ Could not create dbConnection.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -503,7 +501,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
return;
|
||||
}
|
||||
if (![object isKindOfClass:expectedClass]) {
|
||||
OWSProdLogAndFail(@"%@ unexpected class: %@", self.logTag, [object class]);
|
||||
OWSFail(@"%@ unexpected class: %@", self.logTag, [object class]);
|
||||
return;
|
||||
}
|
||||
TSYapDatabaseObject *entity = object;
|
||||
@ -600,7 +598,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@autoreleasepool {
|
||||
if (![exportStream flush]) {
|
||||
OWSProdLogAndFail(@"%@ Could not flush database snapshots.", self.logTag);
|
||||
OWSFail(@"%@ Could not flush database snapshots.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
@ -914,7 +912,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSData *_Nullable jsonData =
|
||||
[NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingPrettyPrinted error:&error];
|
||||
if (!jsonData || error) {
|
||||
OWSProdLogAndFail(@"%@ error encoding manifest file: %@", self.logTag, error);
|
||||
OWSFail(@"%@ error encoding manifest file: %@", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
return [self.backupIO encryptDataAsTempFile:jsonData encryptionKey:self.delegate.backupEncryptionKey];
|
||||
|
||||
@ -53,7 +53,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
{
|
||||
NSString *filePath = [self generateTempFilePath];
|
||||
if (![OWSFileSystem ensureFileExists:filePath]) {
|
||||
OWSProdLogAndFail(@"%@ could not create temp file.", self.logTag);
|
||||
OWSFail(@"%@ could not create temp file.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
return filePath;
|
||||
@ -80,7 +80,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
// TODO: Encrypt the file without loading it into memory.
|
||||
NSData *_Nullable srcData = [NSData dataWithContentsOfFile:srcFilePath];
|
||||
if (srcData.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not load file into memory for encryption.", self.logTag);
|
||||
OWSFail(@"%@ could not load file into memory for encryption.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
return [self encryptDataAsTempFile:srcData encryptionKey:encryptionKey];
|
||||
@ -114,7 +114,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
NSError *error;
|
||||
BOOL success = [encryptedData writeToFile:dstFilePath options:NSDataWritingAtomic error:&error];
|
||||
if (!success || error) {
|
||||
OWSProdLogAndFail(@"%@ error writing encrypted data: %@", self.logTag, error);
|
||||
OWSFail(@"%@ error writing encrypted data: %@", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
[OWSFileSystem protectFileOrFolderAtPath:dstFilePath];
|
||||
@ -146,7 +146,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
NSError *error;
|
||||
BOOL success = [data writeToFile:dstFilePath options:NSDataWritingAtomic error:&error];
|
||||
if (!success || error) {
|
||||
OWSProdLogAndFail(@"%@ error writing decrypted data: %@", self.logTag, error);
|
||||
OWSFail(@"%@ error writing decrypted data: %@", self.logTag, error);
|
||||
return NO;
|
||||
}
|
||||
[OWSFileSystem protectFileOrFolderAtPath:dstFilePath];
|
||||
@ -169,7 +169,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
|
||||
NSData *_Nullable srcData = [NSData dataWithContentsOfFile:srcFilePath];
|
||||
if (srcData.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not load file into memory for decryption.", self.logTag);
|
||||
OWSFail(@"%@ could not load file into memory for decryption.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -201,7 +201,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
@autoreleasepool {
|
||||
|
||||
if (!srcData) {
|
||||
OWSProdLogAndFail(@"%@ missing unencrypted data.", self.logTag);
|
||||
OWSFail(@"%@ missing unencrypted data.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -238,7 +238,7 @@ static const compression_algorithm SignalCompressionAlgorithm = COMPRESSION_LZMA
|
||||
@autoreleasepool {
|
||||
|
||||
if (!srcData) {
|
||||
OWSProdLogAndFail(@"%@ missing unencrypted data.", self.logTag);
|
||||
OWSFail(@"%@ missing unencrypted data.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
@ -175,7 +175,7 @@ NSString *const kOWSBackup_ImportDatabaseKeySpec = @"kOWSBackup_ImportDatabaseKe
|
||||
DDLogVerbose(@"%@ %s", self.logTag, __PRETTY_FUNCTION__);
|
||||
|
||||
if (![self ensureJobTempDir]) {
|
||||
OWSProdLogAndFail(@"%@ Could not create jobTempDirPath.", self.logTag);
|
||||
OWSFail(@"%@ Could not create jobTempDirPath.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -310,7 +310,7 @@ NSString *const kOWSBackup_ImportDatabaseKeySpec = @"kOWSBackup_ImportDatabaseKe
|
||||
|
||||
YapDatabaseConnection *_Nullable dbConnection = self.primaryStorage.newDatabaseConnection;
|
||||
if (!dbConnection) {
|
||||
OWSProdLogAndFail(@"%@ Could not create dbConnection.", self.logTag);
|
||||
OWSFail(@"%@ Could not create dbConnection.", self.logTag);
|
||||
return completion(NO);
|
||||
}
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
self.jobTempDirPath = [temporaryDirectory stringByAppendingPathComponent:[NSUUID UUID].UUIDString];
|
||||
|
||||
if (![OWSFileSystem ensureDirectoryExists:self.jobTempDirPath]) {
|
||||
OWSProdLogAndFail(@"%@ Could not create jobTempDirPath.", self.logTag);
|
||||
OWSFail(@"%@ Could not create jobTempDirPath.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
@ -126,7 +126,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
|
||||
- (void)failWithError:(NSError *)error
|
||||
{
|
||||
OWSProdLogAndFail(@"%@ %s %@", self.logTag, __PRETTY_FUNCTION__, error);
|
||||
OWSFail(@"%@ %s %@", self.logTag, __PRETTY_FUNCTION__, error);
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
OWSAssert(!self.hasSucceeded);
|
||||
@ -178,7 +178,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
failure:^(NSError *error) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
// The manifest file is critical so any error downloading it is unrecoverable.
|
||||
OWSProdLogAndFail(@"%@ Could not download manifest.", weakSelf.logTag);
|
||||
OWSCFail(@"%@ Could not download manifest.", weakSelf.logTag);
|
||||
failure(error);
|
||||
});
|
||||
}];
|
||||
@ -203,7 +203,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
NSData *_Nullable manifestDataDecrypted =
|
||||
[backupIO decryptDataAsData:manifestDataEncrypted encryptionKey:self.delegate.backupEncryptionKey];
|
||||
if (!manifestDataDecrypted) {
|
||||
OWSProdLogAndFail(@"%@ Could not decrypt manifest.", self.logTag);
|
||||
OWSFail(@"%@ Could not decrypt manifest.", self.logTag);
|
||||
return failure();
|
||||
}
|
||||
|
||||
@ -211,7 +211,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
NSDictionary<NSString *, id> *_Nullable json =
|
||||
[NSJSONSerialization JSONObjectWithData:manifestDataDecrypted options:0 error:&error];
|
||||
if (![json isKindOfClass:[NSDictionary class]]) {
|
||||
OWSProdLogAndFail(@"%@ Could not download manifest.", self.logTag);
|
||||
OWSFail(@"%@ Could not download manifest.", self.logTag);
|
||||
return failure();
|
||||
}
|
||||
|
||||
@ -241,18 +241,18 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
OWSAssert(key.length);
|
||||
|
||||
if (![json isKindOfClass:[NSDictionary class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid data: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has invalid data.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSArray *itemMaps = json[key];
|
||||
if (![itemMaps isKindOfClass:[NSArray class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid data: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has invalid data.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSMutableArray<OWSBackupFragment *> *items = [NSMutableArray new];
|
||||
for (NSDictionary *itemMap in itemMaps) {
|
||||
if (![itemMap isKindOfClass:[NSDictionary class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid item: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has invalid item.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSString *_Nullable recordName = itemMap[kOWSBackup_ManifestKey_RecordName];
|
||||
@ -261,31 +261,33 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
|
||||
NSString *_Nullable attachmentId = itemMap[kOWSBackup_ManifestKey_AttachmentId];
|
||||
NSNumber *_Nullable uncompressedDataLength = itemMap[kOWSBackup_ManifestKey_DataSize];
|
||||
if (![recordName isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid recordName: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has invalid recordName: %@.", self.logTag, recordName);
|
||||
return nil;
|
||||
}
|
||||
if (![encryptionKeyString isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid encryptionKey: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has invalid encryptionKey.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
// relativeFilePath is an optional field.
|
||||
if (relativeFilePath && ![relativeFilePath isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid relativeFilePath: %@.", self.logTag, key);
|
||||
DDLogDebug(@"%@ manifest has invalid relativeFilePath: %@.", self.logTag, relativeFilePath);
|
||||
OWSFail(@"%@ manifest has invalid relativeFilePath", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
// attachmentId is an optional field.
|
||||
if (attachmentId && ![attachmentId isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid attachmentId: %@.", self.logTag, key);
|
||||
DDLogDebug(@"%@ manifest has invalid attachmentId: %@.", self.logTag, attachmentId);
|
||||
OWSFail(@"%@ manifest has invalid attachmentId", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable encryptionKey = [NSData dataFromBase64String:encryptionKeyString];
|
||||
if (!encryptionKey) {
|
||||
OWSProdLogAndFail(@"%@ manifest has corrupt encryptionKey: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has corrupt encryptionKey", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
// uncompressedDataLength is an optional field.
|
||||
if (uncompressedDataLength && ![uncompressedDataLength isKindOfClass:[NSNumber class]]) {
|
||||
OWSProdLogAndFail(@"%@ manifest has invalid uncompressedDataLength: %@.", self.logTag, key);
|
||||
OWSFail(@"%@ manifest has invalid uncompressedDataLength: %@.", self.logTag, uncompressedDataLength);
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
@ -66,9 +66,10 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
NSNumber *fileSize = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error][NSFileSize];
|
||||
if (error) {
|
||||
if ([error.domain isEqualToString:NSCocoaErrorDomain] && error.code == 260) {
|
||||
DDLogWarn(@"%@ can't find size of missing file: %@", self.logTag, filePath);
|
||||
DDLogWarn(@"%@ can't find size of missing file.", self.logTag);
|
||||
DDLogDebug(@"%@ can't find size of missing file: %@", self.logTag, filePath);
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ attributesOfItemAtPath: %@ error: %@", self.logTag, filePath, error);
|
||||
OWSFail(@"%@ attributesOfItemAtPath: %@ error: %@", self.logTag, filePath, error);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -96,7 +97,7 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
NSError *error;
|
||||
NSArray<NSString *> *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:&error];
|
||||
if (error) {
|
||||
OWSProdLogAndFail(@"%@ contentsOfDirectoryAtPath error: %@", self.logTag, error);
|
||||
OWSFail(@"%@ contentsOfDirectoryAtPath error: %@", self.logTag, error);
|
||||
return [NSSet new];
|
||||
}
|
||||
for (NSString *fileName in fileNames) {
|
||||
@ -230,7 +231,8 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
NSError *error;
|
||||
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
|
||||
if (!attributes || error) {
|
||||
OWSProdLogAndFail(@"%@ Could not get attributes of file at: %@", self.logTag, filePath);
|
||||
DDLogDebug(@"%@ Could not get attributes of file at: %@", self.logTag, filePath);
|
||||
OWSFail(@"%@ Could not get attributes of file", self.logTag);
|
||||
continue;
|
||||
}
|
||||
DDLogVerbose(@"%@ temp file: %@, %@",
|
||||
@ -318,7 +320,7 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
if (filePath) {
|
||||
[allAttachmentFilePaths addObject:filePath];
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ attachment has no file path.", self.logTag);
|
||||
OWSFail(@"%@ attachment has no file path.", self.logTag);
|
||||
}
|
||||
|
||||
NSString *_Nullable thumbnailPath = [attachmentStream thumbnailPath];
|
||||
@ -472,11 +474,11 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
OWSAssert(databaseConnection);
|
||||
|
||||
if (!AppReadiness.isAppReady) {
|
||||
OWSProdLogAndFail(@"%@ can't audit orphan data until app is ready.", self.logTag);
|
||||
OWSFail(@"%@ can't audit orphan data until app is ready.", self.logTag);
|
||||
return;
|
||||
}
|
||||
if (!CurrentAppContext().isMainApp) {
|
||||
OWSProdLogAndFail(@"%@ can't audit orphan data in app extensions.", self.logTag);
|
||||
OWSFail(@"%@ can't audit orphan data in app extensions.", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -674,7 +676,8 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
NSError *error;
|
||||
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
|
||||
if (!attributes || error) {
|
||||
OWSProdLogAndFail(@"%@ Could not get attributes of file at: %@", self.logTag, filePath);
|
||||
DDLogDebug(@"%@ Could not get attributes of file at: %@", self.logTag, filePath);
|
||||
OWSFail(@"%@ Could not get attributes of file", self.logTag);
|
||||
continue;
|
||||
}
|
||||
// Don't delete files which were created in the last N minutes.
|
||||
@ -692,7 +695,8 @@ typedef void (^OrphanDataBlock)(OWSOrphanData *);
|
||||
}
|
||||
[[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
|
||||
if (error) {
|
||||
OWSProdLogAndFail(@"%@ Could not remove orphan file at: %@", self.logTag, filePath);
|
||||
DDLogDebug(@"%@ Could not remove orphan file at: %@", self.logTag, filePath);
|
||||
OWSFail(@"%@ Could not remove orphan file", self.logTag);
|
||||
}
|
||||
}
|
||||
DDLogInfo(@"%@ Deleted orphan attachment files: %zu", self.logTag, filesRemoved);
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Signal-Swift.h"
|
||||
#import "UIViewController+Permissions.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <Photos/Photos.h>
|
||||
#import <SignalMessaging/UIUtil.h>
|
||||
|
||||
@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (NSString *)contactsSectionTitle
|
||||
{
|
||||
OWSFail(@"Method should never be called.");
|
||||
OWSFail(@"%s Method should never be called.", __PRETTY_FUNCTION__);
|
||||
|
||||
return nil;
|
||||
}
|
||||
@ -84,14 +84,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (BOOL)canSignalAccountBeSelected:(SignalAccount *)signalAccount
|
||||
{
|
||||
OWSFail(@"Method should never be called.");
|
||||
OWSFail(@"%s Method should never be called.", __PRETTY_FUNCTION__);
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (nullable NSString *)accessoryMessageForSignalAccount:(SignalAccount *)signalAccount
|
||||
{
|
||||
OWSFail(@"Method should never be called.");
|
||||
OWSFail(@"%s Method should never be called.", __PRETTY_FUNCTION__);
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSMath.h"
|
||||
#import "UIView+OWS.h"
|
||||
#import "OWSMath.h"
|
||||
#import <SignalServiceKit/AppContext.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@ -350,8 +350,7 @@ NSString *const kOWSSoundsStorageGlobalNotificationKey = @"kOWSSoundsStorageGlob
|
||||
[OWSFileSystem protectFileOrFolderAtPath:defaultSoundPath fileProtectionType:NSFileProtectionNone];
|
||||
|
||||
if (!success) {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ Unable to write new default sound data from: %@ to :%@", self.logTag, soundURL, defaultSoundPath);
|
||||
OWSFail(@"%@ Unable to write new default sound data from: %@ to :%@", self.logTag, soundURL, defaultSoundPath);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ static NSString *const OWS104CreateRecipientIdentitiesMigrationId = @"104";
|
||||
OWSFail(@"%@ Unexpected object in trusted keys collection key: %@ object: %@",
|
||||
self.logTag,
|
||||
recipientId,
|
||||
object);
|
||||
[object class]);
|
||||
return;
|
||||
}
|
||||
NSData *identityKey = (NSData *)object;
|
||||
|
||||
@ -9,10 +9,10 @@
|
||||
#import <SignalServiceKit/NSData+OWS.h>
|
||||
#import <SignalServiceKit/NSNotificationCenter+OWS.h>
|
||||
#import <SignalServiceKit/OWSFileSystem.h>
|
||||
#import <SignalServiceKit/OWSPrimaryStorage.h>
|
||||
#import <SignalServiceKit/TSAccountManager.h>
|
||||
#import <YapDatabase/YapDatabaseConnection.h>
|
||||
#import <YapDatabase/YapDatabaseTransaction.h>
|
||||
#import <SignalServiceKit/OWSPrimaryStorage.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@ -448,7 +448,7 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
|
||||
enumerateCollectionObjectsWithTransaction:transaction
|
||||
usingBlock:^(id object, BOOL *stop) {
|
||||
if (![object isKindOfClass:[OWSUserProfile class]]) {
|
||||
OWSProdLogAndFail(@"%@ unexpected object in user profiles: %@",
|
||||
OWSFail(@"%@ unexpected object in user profiles: %@",
|
||||
self.logTag,
|
||||
[object class]);
|
||||
return;
|
||||
|
||||
@ -3,12 +3,12 @@
|
||||
//
|
||||
|
||||
#import "OWSAvatarBuilder.h"
|
||||
#import "JSQMessagesAvatarImageFactory.h"
|
||||
#import "OWSContactAvatarBuilder.h"
|
||||
#import "OWSGroupAvatarBuilder.h"
|
||||
#import "TSContactThread.h"
|
||||
#import "TSGroupThread.h"
|
||||
#import "UIColor+OWS.h"
|
||||
#import "JSQMessagesAvatarImageFactory.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@ -89,13 +89,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (nullable UIImage *)buildSavedImage
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (UIImage *)buildDefaultImage
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
return [UIImage new];
|
||||
}
|
||||
|
||||
|
||||
@ -728,7 +728,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSArray<NSString *> *_Nullable uniqueIds = [transaction allKeysInCollection:collection];
|
||||
if (!uniqueIds) {
|
||||
OWSProdLogAndFail(@"%@ couldn't load uniqueIds for collection: %@.", self.logTag, collection);
|
||||
OWSFail(@"%@ couldn't load uniqueIds for collection: %@.", self.logTag, collection);
|
||||
return;
|
||||
}
|
||||
DDLogInfo(@"%@ Deleting %lu objects from: %@", self.logTag, (unsigned long)uniqueIds.count, collection);
|
||||
@ -738,7 +738,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// work.
|
||||
TSYapDatabaseObject *_Nullable object = [class fetchObjectWithUniqueID:uniqueId transaction:transaction];
|
||||
if (!object) {
|
||||
OWSProdLogAndFail(@"%@ couldn't load object for deletion: %@.", self.logTag, collection);
|
||||
OWSFail(@"%@ couldn't load object for deletion: %@.", self.logTag, collection);
|
||||
continue;
|
||||
}
|
||||
[object removeWithTransaction:transaction];
|
||||
|
||||
@ -50,13 +50,13 @@ static const long SGX_XFRM_RESERVED = 0xFFFFFFFFFFFFFFF8L;
|
||||
|
||||
uint16_t version = parser.nextShort;
|
||||
if (version < 1 || version > 2) {
|
||||
OWSProdLogAndFail(@"%@ unexpected quote version: %d", self.logTag, (int)version);
|
||||
OWSFail(@"%@ unexpected quote version: %d", self.logTag, (int)version);
|
||||
return nil;
|
||||
}
|
||||
|
||||
uint16_t signType = parser.nextShort;
|
||||
if ((signType & ~1) != 0) {
|
||||
OWSProdLogAndFail(@"%@ invalid signType: %d", self.logTag, (int)signType);
|
||||
OWSFail(@"%@ invalid signType: %d", self.logTag, (int)signType);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -69,19 +69,19 @@ static const long SGX_XFRM_RESERVED = 0xFFFFFFFFFFFFFFF8L;
|
||||
pceSvn = parser.nextShort;
|
||||
} else {
|
||||
if (![parser readZero:2]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero pceSvn.", self.logTag);
|
||||
OWSFail(@"%@ non-zero pceSvn.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
if (![parser readZero:4]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero xeid.", self.logTag);
|
||||
OWSFail(@"%@ non-zero xeid.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSData *_Nullable basename = [parser readBytes:32];
|
||||
if (!basename) {
|
||||
OWSProdLogAndFail(@"%@ couldn't read basename.", self.logTag);
|
||||
OWSFail(@"%@ couldn't read basename.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -89,69 +89,69 @@ static const long SGX_XFRM_RESERVED = 0xFFFFFFFFFFFFFFF8L;
|
||||
|
||||
NSData *_Nullable cpuSvn = [parser readBytes:16];
|
||||
if (!cpuSvn) {
|
||||
OWSProdLogAndFail(@"%@ couldn't read cpuSvn.", self.logTag);
|
||||
OWSFail(@"%@ couldn't read cpuSvn.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
if (![parser readZero:4]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero misc_select.", self.logTag);
|
||||
OWSFail(@"%@ non-zero misc_select.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
if (![parser readZero:28]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero reserved1.", self.logTag);
|
||||
OWSFail(@"%@ non-zero reserved1.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
uint64_t flags = parser.nextLong;
|
||||
if ((flags & SGX_FLAGS_RESERVED) != 0 || (flags & SGX_FLAGS_INITTED) == 0 || (flags & SGX_FLAGS_MODE64BIT) == 0) {
|
||||
OWSProdLogAndFail(@"%@ invalid flags.", self.logTag);
|
||||
OWSFail(@"%@ invalid flags.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
uint64_t xfrm = parser.nextLong;
|
||||
if ((xfrm & SGX_XFRM_RESERVED) != 0) {
|
||||
OWSProdLogAndFail(@"%@ invalid xfrm.", self.logTag);
|
||||
OWSFail(@"%@ invalid xfrm.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSData *_Nullable mrenclave = [parser readBytes:32];
|
||||
if (!mrenclave) {
|
||||
OWSProdLogAndFail(@"%@ couldn't read mrenclave.", self.logTag);
|
||||
OWSFail(@"%@ couldn't read mrenclave.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
if (![parser readZero:32]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero reserved2.", self.logTag);
|
||||
OWSFail(@"%@ non-zero reserved2.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable mrsigner = [parser readBytes:32];
|
||||
if (!mrsigner) {
|
||||
OWSProdLogAndFail(@"%@ couldn't read mrsigner.", self.logTag);
|
||||
OWSFail(@"%@ couldn't read mrsigner.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
if (![parser readZero:96]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero reserved3.", self.logTag);
|
||||
OWSFail(@"%@ non-zero reserved3.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
uint16_t isvProdId = parser.nextShort;
|
||||
uint16_t isvSvn = parser.nextShort;
|
||||
if (![parser readZero:60]) {
|
||||
OWSProdLogAndFail(@"%@ non-zero reserved4.", self.logTag);
|
||||
OWSFail(@"%@ non-zero reserved4.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable reportData = [parser readBytes:64];
|
||||
if (!reportData) {
|
||||
OWSProdLogAndFail(@"%@ couldn't read reportData.", self.logTag);
|
||||
OWSFail(@"%@ couldn't read reportData.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
// quote signature
|
||||
uint32_t signatureLength = parser.nextInt;
|
||||
if (signatureLength != quoteData.length - 436) {
|
||||
OWSProdLogAndFail(@"%@ invalid signatureLength.", self.logTag);
|
||||
OWSFail(@"%@ invalid signatureLength.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable signature = [parser readBytes:signatureLength];
|
||||
if (!signature) {
|
||||
OWSProdLogAndFail(@"%@ couldn't read signature.", self.logTag);
|
||||
OWSFail(@"%@ couldn't read signature.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
@ -57,14 +57,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSArray<NSData *> *_Nullable anchorCertificates = [self anchorCertificates];
|
||||
if (anchorCertificates.count < 1) {
|
||||
OWSProdLogAndFail(@"%@ Could not load anchor certificates.", self.logTag);
|
||||
OWSFail(@"%@ Could not load anchor certificates.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSArray<NSData *> *_Nullable certificateDerDatas = [self convertPemToDer:certificatePem];
|
||||
|
||||
if (certificateDerDatas.count < 1) {
|
||||
OWSProdLogAndFail(@"%@ Could not parse PEM.", self.logTag);
|
||||
OWSFail(@"%@ Could not parse PEM.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -75,7 +75,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
return nil;
|
||||
}
|
||||
if (![self verifyDistinguishedNameOfCertificate:leafCertificateData]) {
|
||||
OWSProdLogAndFail(@"%@ Leaf certificate has invalid name.", self.logTag);
|
||||
OWSFail(@"%@ Leaf certificate has invalid name.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
for (NSData *certificateDerData in certificateDerDatas) {
|
||||
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certificateDerData));
|
||||
if (!certificate) {
|
||||
OWSProdLogAndFail(@"%@ Could not load DER.", self.logTag);
|
||||
OWSFail(@"%@ Could not load DER.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
[certificates addObject:(__bridge_transfer id)certificate];
|
||||
@ -124,7 +124,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
for (NSData *certificateData in anchorCertificates) {
|
||||
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certificateData));
|
||||
if (!certificate) {
|
||||
OWSProdLogAndFail(@"%@ Could not load DER.", self.logTag);
|
||||
OWSFail(@"%@ Could not load DER.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -175,7 +175,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators
|
||||
error:&error];
|
||||
if (!regex || error) {
|
||||
OWSProdLogAndFail(@"%@ could parse regex: %@.", self.logTag, error);
|
||||
OWSFail(@"%@ could parse regex: %@.", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -184,19 +184,19 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
range:NSMakeRange(0, pemString.length)
|
||||
usingBlock:^(NSTextCheckingResult *_Nullable result, NSMatchingFlags flags, BOOL *stop) {
|
||||
if (result.numberOfRanges != 2) {
|
||||
OWSProdLogAndFail(@"%@ invalid PEM regex match.", self.logTag);
|
||||
OWSFail(@"%@ invalid PEM regex match.", self.logTag);
|
||||
return;
|
||||
}
|
||||
NSString *_Nullable derString = [pemString substringWithRange:[result rangeAtIndex:1]];
|
||||
if (derString.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ empty PEM match.", self.logTag);
|
||||
OWSFail(@"%@ empty PEM match.", self.logTag);
|
||||
return;
|
||||
}
|
||||
// dataFromBase64String will ignore whitespace, which is
|
||||
// necessary.
|
||||
NSData *_Nullable derData = [NSData dataFromBase64String:derString];
|
||||
if (derData.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not parse PEM match.", self.logTag);
|
||||
OWSFail(@"%@ could not parse PEM match.", self.logTag);
|
||||
return;
|
||||
}
|
||||
[certificateDatas addObject:derData];
|
||||
@ -213,7 +213,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// We need to use an Intel certificate as the anchor for IAS verification.
|
||||
NSData *_Nullable anchorCertificate = [self certificateDataForService:@"ias-root"];
|
||||
if (!anchorCertificate) {
|
||||
OWSProdLogAndFail(@"%@ could not load anchor certificate.", self.logTag);
|
||||
OWSFail(@"%@ could not load anchor certificate.", self.logTag);
|
||||
OWSRaiseException(@"OWSSignalService_CouldNotLoadCertificate", @"%s", __PRETTY_FUNCTION__);
|
||||
} else {
|
||||
anchorCertificates = @[ anchorCertificate ];
|
||||
@ -228,7 +228,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSString *path = [bundle pathForResource:service ofType:@"cer"];
|
||||
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
|
||||
OWSProdLogAndFail(@"%@ could not locate certificate file.", self.logTag);
|
||||
OWSFail(@"%@ could not locate certificate file.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -247,7 +247,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSData *_Nullable hashData = [Cryptography computeSHA256Digest:bodyData];
|
||||
if (hashData.length != CC_SHA256_DIGEST_LENGTH) {
|
||||
OWSProdLogAndFail(@"%@ could not SHA256 for signature verification.", self.logTag);
|
||||
OWSFail(@"%@ could not SHA256 for signature verification.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
size_t hashBytesSize = CC_SHA256_DIGEST_LENGTH;
|
||||
@ -258,7 +258,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
BOOL isValid = status == errSecSuccess;
|
||||
if (!isValid) {
|
||||
OWSProdLogAndFail(@"%@ signatures do not match.", self.logTag);
|
||||
OWSFail(@"%@ signatures do not match.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
|
||||
@ -111,7 +111,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
if (hashData) {
|
||||
[hashData getBytes:&hashValue length:sizeof(hashValue)];
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ could not compute hash for avatar.", self.logTag);
|
||||
OWSFail(@"%@ could not compute hash for avatar.", self.logTag);
|
||||
}
|
||||
_imageHash = hashValue;
|
||||
} else {
|
||||
@ -310,15 +310,15 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *error;
|
||||
NSArray<CNContact *> *_Nullable contacts = [CNContactVCardSerialization contactsWithData:data error:&error];
|
||||
if (!contacts || error) {
|
||||
OWSProdLogAndFail(@"%@ could not parse vcard: %@", self.logTag, error);
|
||||
OWSFail(@"%@ could not parse vcard: %@", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
if (contacts.count < 1) {
|
||||
OWSProdLogAndFail(@"%@ empty vcard: %@", self.logTag, error);
|
||||
OWSFail(@"%@ empty vcard: %@", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
if (contacts.count > 1) {
|
||||
OWSProdLogAndFail(@"%@ more than one contact in vcard: %@", self.logTag, error);
|
||||
OWSFail(@"%@ more than one contact in vcard: %@", self.logTag, error);
|
||||
}
|
||||
return contacts.firstObject;
|
||||
}
|
||||
|
||||
@ -82,11 +82,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
|
||||
if (!derivedMaterial) {
|
||||
OWSProdLogAndFail(@"%@ missing derived service key.", self.logTag);
|
||||
OWSFail(@"%@ missing derived service key.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
if (derivedMaterial.length != kAES256_KeyByteLength * 2) {
|
||||
OWSProdLogAndFail(@"%@ derived service key has unexpected length.", self.logTag);
|
||||
OWSFail(@"%@ derived service key has unexpected length.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[derivedMaterial subdataWithRange:NSMakeRange(kAES256_KeyByteLength * 0, kAES256_KeyByteLength)];
|
||||
OWSAES256Key *_Nullable clientKey = [OWSAES256Key keyWithData:clientKeyData];
|
||||
if (!clientKey) {
|
||||
OWSProdLogAndFail(@"%@ clientKey has unexpected length.", self.logTag);
|
||||
OWSFail(@"%@ clientKey has unexpected length.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -102,7 +102,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[derivedMaterial subdataWithRange:NSMakeRange(kAES256_KeyByteLength * 1, kAES256_KeyByteLength)];
|
||||
OWSAES256Key *_Nullable serverKey = [OWSAES256Key keyWithData:serverKeyData];
|
||||
if (!serverKey) {
|
||||
OWSProdLogAndFail(@"%@ serverKey has unexpected length.", self.logTag);
|
||||
OWSFail(@"%@ serverKey has unexpected length.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -172,7 +172,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
NSString *_Nullable valueString = self[key];
|
||||
if (![valueString isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse string for key: %@", self.logTag, key);
|
||||
OWSFail(@"%@ couldn't parse string for key: %@", self.logTag, key);
|
||||
return nil;
|
||||
}
|
||||
return valueString;
|
||||
@ -182,12 +182,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
NSString *_Nullable valueString = self[key];
|
||||
if (![valueString isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse base 64 value for key: %@", self.logTag, key);
|
||||
OWSFail(@"%@ couldn't parse base 64 value for key: %@", self.logTag, key);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable valueData = [[NSData alloc] initWithBase64EncodedString:valueString options:0];
|
||||
if (!valueData) {
|
||||
OWSProdLogAndFail(@"%@ couldn't decode base 64 value for key: %@", self.logTag, key);
|
||||
OWSFail(@"%@ couldn't decode base 64 value for key: %@", self.logTag, key);
|
||||
return nil;
|
||||
}
|
||||
return valueData;
|
||||
@ -197,11 +197,15 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
NSData *_Nullable valueData = [self base64DataForKey:key];
|
||||
if (valueData && valueData.length != expectedLength) {
|
||||
OWSProdLogAndFail(@"%@ decoded base 64 value for key: %@, has unexpected length: %zd != %zd",
|
||||
DDLogDebug(@"%@ decoded base 64 value for key: %@, has unexpected length: %zd != %zd",
|
||||
self.logTag,
|
||||
key,
|
||||
valueData.length,
|
||||
expectedLength);
|
||||
OWSFail(@"%@ decoded base 64 value for key has unexpected length: %lu != %lu",
|
||||
self.logTag,
|
||||
(unsigned long)valueData.length,
|
||||
(unsigned long)expectedLength);
|
||||
return nil;
|
||||
}
|
||||
return valueData;
|
||||
@ -292,13 +296,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSDictionary *responseDict = response;
|
||||
NSString *_Nullable password = [responseDict stringForKey:@"password"];
|
||||
if (password.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ missing or empty password.", self.logTag);
|
||||
OWSFail(@"%@ missing or empty password.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSString *_Nullable username = [responseDict stringForKey:@"username"];
|
||||
if (username.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ missing or empty username.", self.logTag);
|
||||
OWSFail(@"%@ missing or empty username.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -359,14 +363,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
OWSAssert(enclaveId.length > 0);
|
||||
|
||||
if (![response isKindOfClass:[NSHTTPURLResponse class]]) {
|
||||
OWSProdLogAndFail(@"%@ unexpected response type.", self.logTag);
|
||||
OWSFail(@"%@ unexpected response type.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
|
||||
NSArray<NSHTTPCookie *> *cookies =
|
||||
[NSHTTPCookie cookiesWithResponseHeaderFields:httpResponse.allHeaderFields forURL:[NSURL new]];
|
||||
if (cookies.count < 1) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse cookie.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse cookie.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -377,52 +381,52 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSData *_Nullable serverEphemeralPublic =
|
||||
[responseDict base64DataForKey:@"serverEphemeralPublic" expectedLength:32];
|
||||
if (!serverEphemeralPublic) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse serverEphemeralPublic.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse serverEphemeralPublic.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable serverStaticPublic = [responseDict base64DataForKey:@"serverStaticPublic" expectedLength:32];
|
||||
if (!serverStaticPublic) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse serverStaticPublic.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse serverStaticPublic.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable encryptedRequestId = [responseDict base64DataForKey:@"ciphertext"];
|
||||
if (!encryptedRequestId) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse encryptedRequestId.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse encryptedRequestId.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable encryptedRequestIv = [responseDict base64DataForKey:@"iv" expectedLength:12];
|
||||
if (!encryptedRequestIv) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse encryptedRequestIv.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse encryptedRequestIv.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable encryptedRequestTag = [responseDict base64DataForKey:@"tag" expectedLength:16];
|
||||
if (!encryptedRequestTag) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse encryptedRequestTag.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse encryptedRequestTag.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable quoteData = [responseDict base64DataForKey:@"quote"];
|
||||
if (!quoteData) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse quote data.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse quote data.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSString *_Nullable signatureBody = [responseDict stringForKey:@"signatureBody"];
|
||||
if (![signatureBody isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse signatureBody.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse signatureBody.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable signature = [responseDict base64DataForKey:@"signature"];
|
||||
if (!signature) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse signature.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse signature.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSString *_Nullable encodedCertificates = [responseDict stringForKey:@"certificates"];
|
||||
if (![encodedCertificates isKindOfClass:[NSString class]]) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse encodedCertificates.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse encodedCertificates.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSString *_Nullable certificates = [encodedCertificates stringByRemovingPercentEncoding];
|
||||
if (!certificates) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse certificates.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse certificates.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -430,13 +434,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
serverEphemeralPublic:serverEphemeralPublic
|
||||
serverStaticPublic:serverStaticPublic];
|
||||
if (!keys) {
|
||||
OWSProdLogAndFail(@"%@ couldn't derive keys.", self.logTag);
|
||||
OWSFail(@"%@ couldn't derive keys.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
CDSQuote *_Nullable quote = [CDSQuote parseQuoteFromData:quoteData];
|
||||
if (!quote) {
|
||||
OWSProdLogAndFail(@"%@ couldn't parse quote.", self.logTag);
|
||||
OWSFail(@"%@ couldn't parse quote.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable requestId = [self decryptRequestId:encryptedRequestId
|
||||
@ -444,12 +448,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
encryptedRequestTag:encryptedRequestTag
|
||||
keys:keys];
|
||||
if (!requestId) {
|
||||
OWSProdLogAndFail(@"%@ couldn't decrypt request id.", self.logTag);
|
||||
OWSFail(@"%@ couldn't decrypt request id.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (![self verifyServerQuote:quote keys:keys enclaveId:enclaveId]) {
|
||||
OWSProdLogAndFail(@"%@ couldn't verify quote.", self.logTag);
|
||||
OWSFail(@"%@ couldn't verify quote.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -457,7 +461,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
signatureBody:signatureBody
|
||||
signature:signature
|
||||
quoteData:quoteData]) {
|
||||
OWSProdLogAndFail(@"%@ couldn't verify ias signature.", self.logTag);
|
||||
OWSFail(@"%@ couldn't verify ias signature.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -485,43 +489,42 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
CDSSigningCertificate *_Nullable certificate = [CDSSigningCertificate parseCertificateFromPem:certificates];
|
||||
if (!certificate) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signing certificate.", self.logTag);
|
||||
OWSFail(@"%@ could not parse signing certificate.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
if (![certificate verifySignatureOfBody:signatureBody signature:signature]) {
|
||||
OWSProdLogAndFail(@"%@ could not verify signature.", self.logTag);
|
||||
OWSFail(@"%@ could not verify signature.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
SignatureBodyEntity *_Nullable signatureBodyEntity = [self parseSignatureBodyEntity:signatureBody];
|
||||
if (!signatureBodyEntity) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signature body.", self.logTag);
|
||||
OWSFail(@"%@ could not parse signature body.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Compare the first N bytes of the quote data with the signed quote body.
|
||||
const NSUInteger kQuoteBodyComparisonLength = 432;
|
||||
if (signatureBodyEntity.isvEnclaveQuoteBody.length < kQuoteBodyComparisonLength) {
|
||||
OWSProdLogAndFail(@"%@ isvEnclaveQuoteBody has unexpected length.", self.logTag);
|
||||
OWSFail(@"%@ isvEnclaveQuoteBody has unexpected length.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
if (quoteData.length < kQuoteBodyComparisonLength) {
|
||||
OWSProdLogAndFail(@"%@ quoteData has unexpected length.", self.logTag);
|
||||
OWSFail(@"%@ quoteData has unexpected length.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
NSData *isvEnclaveQuoteBodyForComparison =
|
||||
[signatureBodyEntity.isvEnclaveQuoteBody subdataWithRange:NSMakeRange(0, kQuoteBodyComparisonLength)];
|
||||
NSData *quoteDataForComparison = [quoteData subdataWithRange:NSMakeRange(0, kQuoteBodyComparisonLength)];
|
||||
if (![isvEnclaveQuoteBodyForComparison ows_constantTimeIsEqualToData:quoteDataForComparison]) {
|
||||
OWSProdLogAndFail(@"%@ isvEnclaveQuoteBody and quoteData do not match.", self.logTag);
|
||||
OWSFail(@"%@ isvEnclaveQuoteBody and quoteData do not match.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
// TODO: Before going to production, remove GROUP_OUT_OF_DATE.
|
||||
if (![@"OK" isEqualToString:signatureBodyEntity.isvEnclaveQuoteStatus]
|
||||
&& ![@"GROUP_OUT_OF_DATE" isEqualToString:signatureBodyEntity.isvEnclaveQuoteStatus]) {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ invalid isvEnclaveQuoteStatus: %@.", self.logTag, signatureBodyEntity.isvEnclaveQuoteStatus);
|
||||
OWSFail(@"%@ invalid isvEnclaveQuoteStatus: %@.", self.logTag, signatureBodyEntity.isvEnclaveQuoteStatus);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -531,7 +534,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[dateFormatter setDateFormat:@"yyy-MM-dd'T'HH:mm:ss.SSSSSS"];
|
||||
NSDate *timestampDate = [dateFormatter dateFromString:signatureBodyEntity.timestamp];
|
||||
if (!timestampDate) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signature body timestamp.", self.logTag);
|
||||
OWSFail(@"%@ could not parse signature body timestamp.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -545,7 +548,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
BOOL isExpired = [now isAfterDate:timestampDatePlus1Day];
|
||||
|
||||
if (isExpired) {
|
||||
OWSProdLogAndFail(@"%@ Signature is expired.", self.logTag);
|
||||
OWSFail(@"%@ Signature is expired.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -562,22 +565,22 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
options:0
|
||||
error:&error];
|
||||
if (error || ![jsonDict isKindOfClass:[NSDictionary class]]) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signature body JSON: %@.", self.logTag, error);
|
||||
OWSFail(@"%@ could not parse signature body JSON: %@.", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
NSString *_Nullable timestamp = [jsonDict stringForKey:@"timestamp"];
|
||||
if (timestamp.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signature timestamp.", self.logTag);
|
||||
OWSFail(@"%@ could not parse signature timestamp.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable isvEnclaveQuoteBody = [jsonDict base64DataForKey:@"isvEnclaveQuoteBody"];
|
||||
if (isvEnclaveQuoteBody.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signature isvEnclaveQuoteBody.", self.logTag);
|
||||
OWSFail(@"%@ could not parse signature isvEnclaveQuoteBody.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSString *_Nullable isvEnclaveQuoteStatus = [jsonDict stringForKey:@"isvEnclaveQuoteStatus"];
|
||||
if (isvEnclaveQuoteStatus.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not parse signature isvEnclaveQuoteStatus.", self.logTag);
|
||||
OWSFail(@"%@ could not parse signature isvEnclaveQuoteStatus.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -595,7 +598,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
OWSAssert(enclaveId.length > 0);
|
||||
|
||||
if (quote.reportData.length < keys.serverStaticPublic.length) {
|
||||
OWSProdLogAndFail(@"%@ reportData has unexpected length: %zd != %zd.",
|
||||
OWSFail(@"%@ reportData has unexpected length: %zd != %zd.",
|
||||
self.logTag,
|
||||
quote.reportData.length,
|
||||
keys.serverStaticPublic.length);
|
||||
@ -605,11 +608,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSData *_Nullable theirServerPublicStatic =
|
||||
[quote.reportData subdataWithRange:NSMakeRange(0, keys.serverStaticPublic.length)];
|
||||
if (theirServerPublicStatic.length != keys.serverStaticPublic.length) {
|
||||
OWSProdLogAndFail(@"%@ could not extract server public static.", self.logTag);
|
||||
OWSFail(@"%@ could not extract server public static.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
if (![keys.serverStaticPublic ows_constantTimeIsEqualToData:theirServerPublicStatic]) {
|
||||
OWSProdLogAndFail(@"%@ server public statics do not match.", self.logTag);
|
||||
OWSFail(@"%@ server public statics do not match.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
// It's easier to compare as hex data than parsing hexadecimal.
|
||||
@ -618,12 +621,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[quote.mrenclave.hexadecimalString dataUsingEncoding:NSUTF8StringEncoding];
|
||||
if (!ourEnclaveIdHexData || !theirEnclaveIdHexData
|
||||
|| ![ourEnclaveIdHexData ows_constantTimeIsEqualToData:theirEnclaveIdHexData]) {
|
||||
OWSProdLogAndFail(@"%@ enclave ids do not match.", self.logTag);
|
||||
OWSFail(@"%@ enclave ids do not match.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
// TODO: Reverse this condition in production.
|
||||
if (!quote.isDebugQuote) {
|
||||
OWSProdLogAndFail(@"%@ quote has invalid isDebugQuote value.", self.logTag);
|
||||
OWSFail(@"%@ quote has invalid isDebugQuote value.", self.logTag);
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
@ -641,7 +644,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
OWSAES256Key *_Nullable key = keys.serverKey;
|
||||
if (!key) {
|
||||
OWSProdLogAndFail(@"%@ invalid server key.", self.logTag);
|
||||
OWSFail(@"%@ invalid server key.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
NSData *_Nullable decryptedData = [Cryptography decryptAESGCMWithInitializationVector:encryptedRequestIv
|
||||
@ -650,7 +653,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
authTag:encryptedRequestTag
|
||||
key:key];
|
||||
if (!decryptedData) {
|
||||
OWSProdLogAndFail(@"%@ couldn't decrypt request id.", self.logTag);
|
||||
OWSFail(@"%@ couldn't decrypt request id.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
return decryptedData;
|
||||
|
||||
@ -189,7 +189,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// be strict about using persisted SignalRecipients as a cache to
|
||||
// reflect "last known registration status". Forcing our codebase to
|
||||
// use those methods helps ensure that we update the cache deliberately.
|
||||
OWSProdLogAndFail(@"%@ Don't call saveWithTransaction from outside this class.", self.logTag);
|
||||
OWSFail(@"%@ Don't call saveWithTransaction from outside this class.", self.logTag);
|
||||
|
||||
[self saveWithTransaction_internal:transaction];
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[interactionsByThread enumerateKeysInGroup:self.uniqueId
|
||||
usingBlock:^(NSString *collection, NSString *key, NSUInteger index, BOOL *stop) {
|
||||
if (![key isKindOfClass:[NSString class]] || key.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ invalid key in thread interactions: %@, %@.",
|
||||
OWSFail(@"%@ invalid key in thread interactions: %@, %@.",
|
||||
self.logTag,
|
||||
key,
|
||||
[key class]);
|
||||
@ -121,7 +121,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
TSInteraction *_Nullable interaction =
|
||||
[TSInteraction fetchObjectWithUniqueID:interactionId transaction:transaction];
|
||||
if (!interaction) {
|
||||
OWSProdLogAndFail(@"%@ couldn't load thread's interaction for deletion.", self.logTag);
|
||||
OWSFail(@"%@ couldn't load thread's interaction for deletion.", self.logTag);
|
||||
continue;
|
||||
}
|
||||
[interaction removeWithTransaction:transaction];
|
||||
@ -131,7 +131,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
#pragma mark To be subclassed.
|
||||
|
||||
- (BOOL)isGroupThread {
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return NO;
|
||||
}
|
||||
@ -143,14 +143,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
|
||||
- (NSString *)name {
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSArray<NSString *> *)recipientIdentifiers
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return @[];
|
||||
}
|
||||
@ -242,7 +242,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSString *collection, NSString *key, id object, id metadata, NSUInteger index, BOOL *stop) {
|
||||
|
||||
if (![object conformsToProtocol:@protocol(OWSReadTracking)]) {
|
||||
OWSFail(@"%@ Unexpected object in unseen messages: %@", self.logTag, object);
|
||||
OWSFail(@"%@ Unexpected object in unseen messages: %@", self.logTag, [object class]);
|
||||
return;
|
||||
}
|
||||
[messages addObject:(id<OWSReadTracking>)object];
|
||||
@ -461,7 +461,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
if (hashData) {
|
||||
[hashData getBytes:&hash length:hashingLength];
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ could not compute hash for color seed.", self.logTag);
|
||||
OWSFail(@"%@ could not compute hash for color seed.", self.logTag);
|
||||
}
|
||||
|
||||
NSUInteger index = (hash % [self.conversationColorNames count]);
|
||||
|
||||
@ -448,7 +448,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
|
||||
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)self.mediaURL, NULL);
|
||||
OWSAssert(imageSource != NULL) NSDictionary *imageOptions = @{
|
||||
OWSAssert(imageSource != NULL);
|
||||
NSDictionary *imageOptions = @{
|
||||
(NSString const *)kCGImageSourceCreateThumbnailFromImageIfAbsent : (NSNumber const *)kCFBooleanTrue,
|
||||
(NSString const *)kCGImageSourceThumbnailMaxPixelSize : @(thumbnailSize),
|
||||
(NSString const *)kCGImageSourceCreateThumbnailWithTransform : (NSNumber const *)kCFBooleanTrue
|
||||
|
||||
@ -70,7 +70,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return [SSKProtoSyncMessageBuilder new];
|
||||
}
|
||||
|
||||
@ -311,7 +311,7 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||
[self ensureDisplayName];
|
||||
|
||||
if (_displayName.length < 1) {
|
||||
OWSProdLogAndFail(@"%@ could not derive a valid display name.", self.logTag);
|
||||
OWSFail(@"%@ could not derive a valid display name.", self.logTag);
|
||||
return NSLocalizedString(@"CONTACT_WITHOUT_NAME", @"Indicates that a contact has no name.");
|
||||
}
|
||||
return _displayName;
|
||||
@ -569,7 +569,7 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||
+ (nullable OWSContact *)contactForSystemContact:(CNContact *)systemContact
|
||||
{
|
||||
if (!systemContact) {
|
||||
OWSProdLogAndFail(@"%@ Missing contact.", self.logTag);
|
||||
OWSFail(@"%@ Missing contact.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -664,7 +664,7 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||
+ (nullable CNContact *)systemContactForContact:(OWSContact *)contact imageData:(nullable NSData *)imageData
|
||||
{
|
||||
if (!contact) {
|
||||
OWSProdLogAndFail(@"%@ Missing contact.", self.logTag);
|
||||
OWSFail(@"%@ Missing contact.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -921,7 +921,7 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||
return nil;
|
||||
}
|
||||
if (contactProto.number.count < 1 && contactProto.email.count < 1 && contactProto.address.count < 1) {
|
||||
OWSProdLogAndFail(@"%@ contact has neither phone, email or address.", self.logTag);
|
||||
OWSFail(@"%@ contact has neither phone, email or address.", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
return contactProto;
|
||||
|
||||
@ -156,7 +156,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
||||
{
|
||||
uint32_t maxExpirationDuration = [OWSDisappearingMessagesConfiguration maxDurationSeconds];
|
||||
if (expiresInSeconds > maxExpirationDuration) {
|
||||
OWSProdLogAndFail(@"%@ in %s using `maxExpirationDuration` instead of: %u",
|
||||
OWSFail(@"%@ in %s using `maxExpirationDuration` instead of: %u",
|
||||
self.logTag,
|
||||
__PRETTY_FUNCTION__,
|
||||
maxExpirationDuration);
|
||||
@ -293,7 +293,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
||||
TSAttachment *_Nullable attachment =
|
||||
[TSAttachment fetchObjectWithUniqueID:attachmentId transaction:transaction];
|
||||
if (!attachment) {
|
||||
OWSProdLogAndFail(@"%@ couldn't load interaction's attachment for deletion.", self.logTag);
|
||||
OWSFail(@"%@ couldn't load interaction's attachment for deletion.", self.logTag);
|
||||
continue;
|
||||
}
|
||||
[attachment removeWithTransaction:transaction];
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TSInvalidIdentityKeyErrorMessage.h"
|
||||
@ -10,18 +10,18 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (void)acceptNewIdentityKey
|
||||
{
|
||||
OWSFail(@"Method needs to be implemented in subclasses of TSInvalidIdentityKeyErrorMessage.");
|
||||
OWSAbstractMethod();
|
||||
}
|
||||
|
||||
- (nullable NSData *)newIdentityKey
|
||||
{
|
||||
OWSFail(@"Method needs to be implemented in subclasses of TSInvalidIdentityKeyErrorMessage.");
|
||||
OWSAbstractMethod();
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString *)theirSignalId
|
||||
{
|
||||
OWSFail(@"Method needs to be implemented in subclasses of TSInvalidIdentityKeyErrorMessage.");
|
||||
OWSAbstractMethod();
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *error;
|
||||
SSKProtoEnvelope *_Nullable envelope = [SSKProtoEnvelope parseData:self.envelopeData error:&error];
|
||||
if (error || envelope == nil) {
|
||||
OWSProdLogAndFail(@"%@ Could not parse proto: %@", self.logTag, error);
|
||||
OWSFail(@"%@ Could not parse proto: %@", self.logTag, error);
|
||||
} else {
|
||||
_envelope = envelope;
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
SSKProtoEnvelope *_Nullable result = [SSKProtoEnvelope parseData:self.envelopeData error:&error];
|
||||
|
||||
if (error) {
|
||||
OWSProdLogAndFail(@"%@ paring SSKProtoEnvelope failed with error: %@", self.logTag, error);
|
||||
OWSFail(@"%@ paring SSKProtoEnvelope failed with error: %@", self.logTag, error);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@ -405,7 +405,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||
transaction:transaction];
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
OWSProdLogAndFail(@"%@ Received an invalid envelope: %@", self.logTag, exception.debugDescription);
|
||||
OWSFail(@"%@ Received an invalid envelope: %@", self.logTag, exception.debugDescription);
|
||||
reportFailure(transaction);
|
||||
}
|
||||
[processedJobs addObject:job];
|
||||
|
||||
@ -58,7 +58,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
|
||||
OWSFail(@"%@ in %s object was unexpected class: %@",
|
||||
self.logTag,
|
||||
__PRETTY_FUNCTION__,
|
||||
object);
|
||||
[object class]);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -138,7 +138,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
|
||||
if ([message isKindOfClass:[TSMessage class]]) {
|
||||
block(message);
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ unexpected object: %@", self.logTag, message);
|
||||
OWSFail(@"%@ unexpected object: %@", self.logTag, [message class]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -152,12 +152,12 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
|
||||
|
||||
TSMessage *_Nullable message = [TSMessage fetchObjectWithUniqueID:expiringMessageId transaction:transaction];
|
||||
if (![message isKindOfClass:[TSMessage class]]) {
|
||||
OWSProdLogAndFail(@"%@ unexpected object: %@", self.logTag, message);
|
||||
OWSFail(@"%@ unexpected object: %@", self.logTag, [message class]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (![message shouldStartExpireTimerWithTransaction:transaction]) {
|
||||
OWSProdLogAndFail(@"%@ object: %@ shouldn't expire.", self.logTag, message);
|
||||
OWSFail(@"%@ object: %@ shouldn't expire.", self.logTag, message);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -375,7 +375,7 @@ void AssertIsOnDisappearingMessagesQueue()
|
||||
// exception is if we're in close proximity to the disappearanceTimer, in which case a race condition
|
||||
// is inevitable.
|
||||
if (!recentlyScheduledDisappearanceTimer && deletedCount > 0) {
|
||||
OWSProdLogAndFail(@"%@ unexpectedly deleted disappearing messages via fallback timer.", self.logTag);
|
||||
OWSFail(@"%@ unexpectedly deleted disappearing messages via fallback timer.", self.logTag);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -395,8 +395,7 @@ void AssertIsOnDisappearingMessagesQueue()
|
||||
{
|
||||
[self.disappearingMessagesFinder
|
||||
enumerateMessagesWhichFailedToStartExpiringWithBlock:^(TSMessage *_Nonnull message) {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ starting old timer for message timestamp: %lu", self.logTag, (unsigned long)message.timestamp);
|
||||
OWSFail(@"%@ starting old timer for message timestamp: %lu", self.logTag, (unsigned long)message.timestamp);
|
||||
|
||||
// We don't know when it was actually read, so assume it was read as soon as it was received.
|
||||
uint64_t readTimeBestGuess = message.timestampForSorting;
|
||||
|
||||
@ -100,8 +100,7 @@ static NSString *const OWSIncompleteCallsJobCallTypeIndex = @"index_calls_on_cal
|
||||
[call updateCallType:RPRecentCallTypeIncomingMissed transaction:transaction];
|
||||
OWSAssert(call.callType == RPRecentCallTypeIncomingMissed);
|
||||
} else {
|
||||
OWSProdLogAndFail(
|
||||
@"%@ call has unexpected call type: %@", self.logTag, NSStringFromCallType(call.callType));
|
||||
OWSFail(@"%@ call has unexpected call type: %@", self.logTag, NSStringFromCallType(call.callType));
|
||||
return;
|
||||
}
|
||||
count++;
|
||||
|
||||
@ -178,7 +178,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
break;
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
OWSProdLogAndFail(@"%@ Received an invalid envelope: %@", self.logTag, exception.debugDescription);
|
||||
OWSFail(@"%@ Received an invalid envelope: %@", self.logTag, exception.debugDescription);
|
||||
OWSProdFail([OWSAnalyticsEvents messageManagerErrorInvalidProtocolMessage]);
|
||||
|
||||
[[OWSPrimaryStorage.sharedManager newDatabaseConnection]
|
||||
|
||||
@ -150,7 +150,6 @@ NSString *envelopeAddress(SSKProtoEnvelope *envelope)
|
||||
} else if (syncMessage.request.type == SSKProtoSyncMessageRequestTypeConfiguration) {
|
||||
[description appendString:@"ConfigurationRequest"];
|
||||
} else {
|
||||
// Shouldn't happen
|
||||
OWSFail(@"Unknown sync message request type");
|
||||
[description appendString:@"UnknownRequest"];
|
||||
}
|
||||
@ -163,7 +162,6 @@ NSString *envelopeAddress(SSKProtoEnvelope *envelope)
|
||||
[NSString stringWithFormat:@"Verification for: %@", syncMessage.verified.destination];
|
||||
[description appendString:verifiedString];
|
||||
} else {
|
||||
// Shouldn't happen
|
||||
OWSFail(@"Unknown sync message type");
|
||||
[description appendString:@"Unknown"];
|
||||
}
|
||||
|
||||
@ -179,8 +179,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
DDLogInfo(@"%@ handling decrypted envelope: %@", self.logTag, [self descriptionForEnvelope:envelope]);
|
||||
|
||||
if (!envelope.source.isValidE164) {
|
||||
DDLogVerbose(
|
||||
@"%@ incoming envelope has invalid source: %@", self.logTag, [self descriptionForEnvelope:envelope]);
|
||||
OWSFail(@"%@ incoming envelope has invalid source", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -330,7 +330,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||
|
||||
SSKProtoEnvelope *_Nullable envelope = job.envelopeProto;
|
||||
if (!envelope) {
|
||||
OWSProdLogAndFail(@"%@ Could not parse proto.", self.logTag);
|
||||
OWSFail(@"%@ Could not parse proto.", self.logTag);
|
||||
// TODO: Add analytics.
|
||||
|
||||
[[OWSPrimaryStorage.sharedManager newDatabaseConnection]
|
||||
|
||||
@ -177,7 +177,7 @@ void AssertIsOnSendingQueue()
|
||||
- (void)didSucceed
|
||||
{
|
||||
if (self.message.messageState != TSOutgoingMessageStateSent) {
|
||||
OWSProdLogAndFail(@"%@ unexpected message status: %@", self.logTag, self.message.statusDescription);
|
||||
OWSFail(@"%@ unexpected message status: %@", self.logTag, self.message.statusDescription);
|
||||
}
|
||||
|
||||
self.successHandler();
|
||||
@ -570,7 +570,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
||||
failure:failureHandler];
|
||||
} else {
|
||||
// Neither a group nor contact thread? This should never happen.
|
||||
OWSFail(@"%@ Unknown message type: %@", self.logTag, NSStringFromClass([message class]));
|
||||
OWSFail(@"%@ Unknown message type: %@", self.logTag, [message class]);
|
||||
|
||||
NSError *error = OWSErrorMakeFailedToSendOutgoingMessageError();
|
||||
[error setIsRetryable:NO];
|
||||
|
||||
@ -452,12 +452,12 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE
|
||||
uint64_t messageIdTimestamp = readReceiptProto.timestamp;
|
||||
|
||||
if (senderId.length == 0) {
|
||||
OWSProdLogAndFail(@"%@ in %s senderId was unexpectedly nil", self.logTag, __PRETTY_FUNCTION__);
|
||||
OWSFail(@"%@ in %s senderId was unexpectedly nil", self.logTag, __PRETTY_FUNCTION__);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (messageIdTimestamp == 0) {
|
||||
OWSProdLogAndFail(@"%@ in %s messageIdTimestamp was unexpectedly 0", self.logTag, __PRETTY_FUNCTION__);
|
||||
OWSFail(@"%@ in %s messageIdTimestamp was unexpectedly 0", self.logTag, __PRETTY_FUNCTION__);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -529,12 +529,11 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE
|
||||
BOOL *stop) {
|
||||
|
||||
if (![object conformsToProtocol:@protocol(OWSReadTracking)]) {
|
||||
OWSFail(
|
||||
@"Expected to conform to OWSReadTracking: object with class: %@ collection: %@ "
|
||||
OWSFail(@"Expected to conform to OWSReadTracking: object with class: %@ collection: %@ "
|
||||
@"key: %@",
|
||||
[object class],
|
||||
collection,
|
||||
key);
|
||||
[object class],
|
||||
collection,
|
||||
key);
|
||||
return;
|
||||
}
|
||||
id<OWSReadTracking> possiblyRead = (id<OWSReadTracking>)object;
|
||||
|
||||
@ -15,14 +15,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
id identityKeyObject = [dictionary objectForKey:@"identityKey"];
|
||||
if (![identityKeyObject isKindOfClass:[NSString class]]) {
|
||||
OWSFail(@"Unexpected identityKeyObject: %@", identityKeyObject);
|
||||
OWSFail(@"Unexpected identityKeyObject: %@", [identityKeyObject class]);
|
||||
return nil;
|
||||
}
|
||||
NSString *identityKeyString = (NSString *)identityKeyObject;
|
||||
|
||||
id devicesObject = [dictionary objectForKey:@"devices"];
|
||||
if (![devicesObject isKindOfClass:[NSArray class]]) {
|
||||
OWSFail(@"Unexpected devicesObject: %@", devicesObject);
|
||||
OWSFail(@"Unexpected devicesObject: %@", [devicesObject class]);
|
||||
return nil;
|
||||
}
|
||||
NSArray *devicesArray = (NSArray *)devicesObject;
|
||||
|
||||
@ -123,7 +123,7 @@ static const CGFloat kAttachmentUploadProgressTheta = 0.001f;
|
||||
NSData *_Nullable encryptedAttachmentData =
|
||||
[Cryptography encryptAttachmentData:attachmentData outKey:&encryptionKey outDigest:&digest];
|
||||
if (!encryptedAttachmentData) {
|
||||
OWSProdLogAndFail(@"%@ could not encrypt attachment data.", self.logTag);
|
||||
OWSFail(@"%@ could not encrypt attachment data.", self.logTag);
|
||||
error = OWSErrorMakeFailedToSendOutgoingMessageError();
|
||||
error.isRetryable = YES;
|
||||
[self reportError:error];
|
||||
|
||||
@ -485,7 +485,7 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||
options:(NSJSONWritingOptions)0
|
||||
error:&error];
|
||||
if (!jsonData || error) {
|
||||
OWSProdLogAndFail(@"%@ could not serialize request JSON: %@", self.logTag, error);
|
||||
OWSFail(@"%@ could not serialize request JSON: %@", self.logTag, error);
|
||||
[socketMessage didFailBeforeSending];
|
||||
return;
|
||||
}
|
||||
@ -516,7 +516,7 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||
|
||||
NSData *_Nullable messageData = [messageBuilder buildSerializedDataAndReturnError:&error];
|
||||
if (!messageData || error) {
|
||||
OWSProdLogAndFail(@"%@ could not serialize proto: %@.", self.logTag, error);
|
||||
OWSFail(@"%@ could not serialize proto: %@.", self.logTag, error);
|
||||
[socketMessage didFailBeforeSending];
|
||||
return;
|
||||
}
|
||||
@ -529,7 +529,7 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||
|
||||
BOOL wasScheduled = [self.websocket sendDataNoCopy:messageData error:&error];
|
||||
if (!wasScheduled || error) {
|
||||
OWSProdLogAndFail(@"%@ could not send socket request: %@", self.logTag, error);
|
||||
OWSFail(@"%@ could not send socket request: %@", self.logTag, error);
|
||||
[socketMessage didFailBeforeSending];
|
||||
return;
|
||||
}
|
||||
@ -587,7 +587,7 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||
id _Nullable responseJson =
|
||||
[NSJSONSerialization JSONObjectWithData:responseData options:(NSJSONReadingOptions)0 error:&error];
|
||||
if (!responseJson || error) {
|
||||
OWSProdLogAndFail(@"%@ could not parse WebSocket response JSON: %@.", self.logTag, error);
|
||||
OWSFail(@"%@ could not parse WebSocket response JSON: %@.", self.logTag, error);
|
||||
hasValidResponse = NO;
|
||||
} else {
|
||||
responseObject = responseJson;
|
||||
@ -745,7 +745,7 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||
|
||||
[self.messageReceiver handleReceivedEnvelopeData:decryptedPayload];
|
||||
} @catch (NSException *exception) {
|
||||
OWSProdLogAndFail(@"%@ Received an invalid envelope: %@", self.logTag, exception.debugDescription);
|
||||
OWSFail(@"%@ Received an invalid envelope: %@", self.logTag, exception.debugDescription);
|
||||
// TODO: Add analytics.
|
||||
|
||||
[[OWSPrimaryStorage.sharedManager newDatabaseConnection] readWriteWithBlock:^(
|
||||
|
||||
@ -183,7 +183,7 @@ NSString *const kSessionStoreDBConnectionKey = @"kSessionStoreDBConnectionKey";
|
||||
for (id deviceId in sessionRecords) {
|
||||
id object = sessionRecords[deviceId];
|
||||
if (![object isKindOfClass:[SessionRecord class]]) {
|
||||
OWSFail(@"Unexpected object in session dict: %@", object);
|
||||
OWSFail(@"Unexpected object in session dict: %@", [object class]);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -218,8 +218,9 @@ NSString *const kSessionStoreDBConnectionKey = @"kSessionStoreDBConnectionKey";
|
||||
id _Nonnull deviceSessionsObject,
|
||||
BOOL *_Nonnull stop) {
|
||||
if (![deviceSessionsObject isKindOfClass:[NSDictionary class]]) {
|
||||
OWSFail(
|
||||
@"%@ Unexpected type: %@ in collection.", tag, deviceSessionsObject);
|
||||
OWSFail(@"%@ Unexpected type: %@ in collection.",
|
||||
tag,
|
||||
[deviceSessionsObject class]);
|
||||
return;
|
||||
}
|
||||
NSDictionary *deviceSessions = (NSDictionary *)deviceSessionsObject;
|
||||
@ -230,7 +231,7 @@ NSString *const kSessionStoreDBConnectionKey = @"kSessionStoreDBConnectionKey";
|
||||
if (![sessionRecordObject isKindOfClass:[SessionRecord class]]) {
|
||||
OWSFail(@"%@ Unexpected type: %@ in collection.",
|
||||
tag,
|
||||
sessionRecordObject);
|
||||
[sessionRecordObject class]);
|
||||
return;
|
||||
}
|
||||
SessionRecord *sessionRecord = (SessionRecord *)sessionRecordObject;
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
//
|
||||
|
||||
#import "OWSPrimaryStorage+SignedPreKeyStore.h"
|
||||
#import "Cryptography.h"
|
||||
#import "OWSIdentityManager.h"
|
||||
#import "OWSPrimaryStorage+PreKeyStore.h"
|
||||
#import "OWSPrimaryStorage+keyFromIntLong.h"
|
||||
@ -176,7 +175,7 @@ NSString *const OWSPrimaryStorageKeyPrekeyCurrentSignedPrekeyId = @"currentSigne
|
||||
if (![signedPreKeyObject isKindOfClass:[SignedPreKeyRecord class]]) {
|
||||
OWSFail(@"%@ Was expecting SignedPreKeyRecord, but found: %@",
|
||||
tag,
|
||||
signedPreKeyObject);
|
||||
[signedPreKeyObject class]);
|
||||
return;
|
||||
}
|
||||
SignedPreKeyRecord *signedPreKeyRecord
|
||||
|
||||
@ -39,8 +39,7 @@ void VerifyRegistrationsForPrimaryStorage(OWSStorage *storage)
|
||||
DDLogVerbose(@"Verifying database extension: %@", extensionName);
|
||||
YapDatabaseViewTransaction *_Nullable viewTransaction = [transaction ext:extensionName];
|
||||
if (!viewTransaction) {
|
||||
OWSProdLogAndCFail(
|
||||
@"VerifyRegistrationsForPrimaryStorage missing database extension: %@", extensionName);
|
||||
OWSCFail(@"VerifyRegistrationsForPrimaryStorage missing database extension: %@", extensionName);
|
||||
|
||||
[OWSStorage incrementVersionOfDatabaseExtension:extensionName];
|
||||
}
|
||||
|
||||
@ -207,7 +207,7 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
|
||||
- (void)encodeWithCoder:(NSCoder *)aCoder
|
||||
{
|
||||
OWSProdLogAndFail(@"%@ Tried to save object from unknown collection", self.logTag);
|
||||
OWSFail(@"%@ Tried to save object from unknown collection", self.logTag);
|
||||
|
||||
return [super encodeWithCoder:aCoder];
|
||||
}
|
||||
@ -224,21 +224,21 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
|
||||
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
OWSProdLogAndFail(@"%@ Tried to save unknown object", self.logTag);
|
||||
OWSFail(@"%@ Tried to save unknown object", self.logTag);
|
||||
|
||||
// No-op.
|
||||
}
|
||||
|
||||
- (void)touchWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
OWSProdLogAndFail(@"%@ Tried to touch unknown object", self.logTag);
|
||||
OWSFail(@"%@ Tried to touch unknown object", self.logTag);
|
||||
|
||||
// No-op.
|
||||
}
|
||||
|
||||
- (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
OWSProdLogAndFail(@"%@ Tried to remove unknown object", self.logTag);
|
||||
OWSFail(@"%@ Tried to remove unknown object", self.logTag);
|
||||
|
||||
// No-op.
|
||||
}
|
||||
@ -262,7 +262,7 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
if ([name isEqualToString:@"TSRecipient"]) {
|
||||
DDLogError(@"%@ Could not decode object: %@", self.logTag, name);
|
||||
} else {
|
||||
OWSProdLogAndFail(@"%@ Could not decode object: %@", self.logTag, name);
|
||||
OWSFail(@"%@ Could not decode object: %@", self.logTag, name);
|
||||
}
|
||||
OWSProdCritical([OWSAnalyticsEvents storageErrorCouldNotDecodeClass]);
|
||||
return [OWSUnknownDBObject class];
|
||||
@ -344,14 +344,14 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
|
||||
- (BOOL)areAsyncRegistrationsComplete
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)areSyncRegistrationsComplete
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return NO;
|
||||
}
|
||||
@ -363,12 +363,12 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
|
||||
- (void)runSyncRegistrations
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
}
|
||||
|
||||
- (void)runAsyncRegistrationsWithCompletion:(void (^_Nonnull)(void))completion
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
}
|
||||
|
||||
+ (void)registerExtensionsWithMigrationBlock:(OWSStorageMigrationBlock)migrationBlock
|
||||
@ -482,7 +482,7 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
|
||||
return ^id(NSString __unused *collection, NSString __unused *key, NSData *data) {
|
||||
if (!data || data.length <= 0) {
|
||||
OWSProdLogAndFail(@"%@ can't deserialize null object: %@", self.logTag, collection);
|
||||
OWSFail(@"%@ can't deserialize null object: %@", self.logTag, collection);
|
||||
return [OWSUnknownDBObject new];
|
||||
}
|
||||
|
||||
@ -492,7 +492,7 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
return [unarchiver decodeObjectForKey:@"root"];
|
||||
} @catch (NSException *exception) {
|
||||
// Sync log in case we bail.
|
||||
OWSProdLogAndFail(@"%@ error deserializing object: %@, %@", self.logTag, collection, exception);
|
||||
OWSFail(@"%@ error deserializing object: %@, %@", self.logTag, collection, exception);
|
||||
OWSProdCritical([OWSAnalyticsEvents storageErrorDeserialization]);
|
||||
@throw exception;
|
||||
}
|
||||
@ -592,7 +592,7 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
// This method needs to be able to update the versionTag of all extensions.
|
||||
// If we start using other extension types, we need to modify this method to
|
||||
// handle them as well.
|
||||
OWSProdLogAndFail(@"%@ Unknown extension type: %@", self.logTag, [extension class]);
|
||||
OWSFail(@"%@ Unknown extension type: %@", self.logTag, [extension class]);
|
||||
|
||||
return extension;
|
||||
}
|
||||
@ -689,21 +689,21 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
||||
|
||||
- (NSString *)databaseFilePath
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return @"";
|
||||
}
|
||||
|
||||
- (NSString *)databaseFilePath_SHM
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return @"";
|
||||
}
|
||||
|
||||
- (NSString *)databaseFilePath_WAL
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return @"";
|
||||
}
|
||||
|
||||
@ -128,7 +128,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
if (![object isKindOfClass:[TSInteraction class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
return nil;
|
||||
}
|
||||
TSInteraction *interaction = (TSInteraction *)object;
|
||||
@ -156,7 +156,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
if (![object isKindOfClass:[TSInteraction class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
return nil;
|
||||
}
|
||||
TSInteraction *interaction = (TSInteraction *)object;
|
||||
@ -197,7 +197,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
if (![object isKindOfClass:[TSThread class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
return nil;
|
||||
}
|
||||
TSThread *thread = (TSThread *)object;
|
||||
@ -270,11 +270,11 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
NSString *key2,
|
||||
id object2) {
|
||||
if (![object1 isKindOfClass:[TSThread class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
if (![object2 isKindOfClass:[TSThread class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
TSThread *thread1 = (TSThread *)object1;
|
||||
@ -297,11 +297,11 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
NSString *key2,
|
||||
id object2) {
|
||||
if (![object1 isKindOfClass:[TSInteraction class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
if (![object2 isKindOfClass:[TSInteraction class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
TSInteraction *message1 = (TSInteraction *)object1;
|
||||
@ -316,7 +316,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *_Nullable(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
if (![object isKindOfClass:[OWSDevice class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
return nil;
|
||||
}
|
||||
OWSDevice *device = (OWSDevice *)object;
|
||||
@ -336,11 +336,11 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
NSString *key2,
|
||||
id object2) {
|
||||
if (![object1 isKindOfClass:[OWSDevice class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
if (![object2 isKindOfClass:[OWSDevice class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
OWSDevice *device1 = (OWSDevice *)object1;
|
||||
@ -366,7 +366,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *_Nullable(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
if (![object isKindOfClass:[TSAttachment class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
|
||||
return nil;
|
||||
}
|
||||
if (![object isKindOfClass:[TSAttachmentStream class]]) {
|
||||
@ -390,11 +390,11 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
||||
NSString *key2,
|
||||
id object2) {
|
||||
if (![object1 isKindOfClass:[TSAttachmentStream class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
if (![object2 isKindOfClass:[TSAttachmentStream class]]) {
|
||||
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
OWSFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
|
||||
return NSOrderedSame;
|
||||
}
|
||||
|
||||
|
||||
@ -32,31 +32,31 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (NSData *)data
|
||||
{
|
||||
OWSFail(@"%@ Missing required method: data", self.logTag);
|
||||
OWSAbstractMethod();
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (nullable NSURL *)dataUrl
|
||||
{
|
||||
OWSFail(@"%@ Missing required method: dataUrl", self.logTag);
|
||||
OWSAbstractMethod();
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (nullable NSString *)dataPathIfOnDisk
|
||||
{
|
||||
OWSFail(@"%@ Missing required method: dataPathIfOnDisk", self.logTag);
|
||||
OWSAbstractMethod();
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSUInteger)dataLength
|
||||
{
|
||||
OWSFail(@"%@ Missing required method: dataLength", self.logTag);
|
||||
OWSAbstractMethod();
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (BOOL)writeToPath:(NSString *)dstFilePath
|
||||
{
|
||||
OWSFail(@"%@ Missing required method: writeToPath:", self.logTag);
|
||||
OWSAbstractMethod();
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// Returns the MIME type, if known.
|
||||
- (nullable NSString *)mimeType
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
OWSAbstractMethod();
|
||||
|
||||
return nil;
|
||||
}
|
||||
@ -188,7 +188,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
if ([self writeToPath:filePath]) {
|
||||
self.cachedFilePath = filePath;
|
||||
} else {
|
||||
OWSFail(@"%@ Could not write data to disk: %@", self.logTag, self.fileExtension);
|
||||
DDLogDebug(@"%@ Could not write data to disk: %@", self.logTag, self.fileExtension);
|
||||
OWSFail(@"%@ Could not write data to disk.", self.logTag);
|
||||
}
|
||||
}
|
||||
|
||||
@ -219,7 +220,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
BOOL success = [dataCopy writeToFile:dstFilePath atomically:YES];
|
||||
if (!success) {
|
||||
OWSFail(@"%@ Could not write data to disk: %@", self.logTag, dstFilePath);
|
||||
DDLogDebug(@"%@ Could not write data to disk: %@", self.logTag, dstFilePath);
|
||||
OWSFail(@"%@ Could not write data to disk.", self.logTag);
|
||||
return NO;
|
||||
} else {
|
||||
return YES;
|
||||
@ -318,7 +320,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
self.cachedData = [NSData dataWithContentsOfFile:self.filePath];
|
||||
}
|
||||
if (!self.cachedData) {
|
||||
OWSFail(@"%@ Could not read data from disk: %@", self.logTag, self.filePath);
|
||||
DDLogDebug(@"%@ Could not read data from disk: %@", self.logTag, self.filePath);
|
||||
OWSFail(@"%@ Could not read data from disk.", self.logTag);
|
||||
self.cachedData = [NSData new];
|
||||
}
|
||||
return self.cachedData;
|
||||
@ -357,7 +360,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSDictionary<NSFileAttributeKey, id> *_Nullable attributes =
|
||||
[[NSFileManager defaultManager] attributesOfItemAtPath:self.filePath error:&error];
|
||||
if (!attributes || error) {
|
||||
OWSFail(@"%@ Could not read data length from disk: %@, %@", self.logTag, self.filePath, error);
|
||||
DDLogDebug(@"%@ Could not read data length from disk: %@, %@", self.logTag, self.filePath, error);
|
||||
OWSFail(@"%@ Could not read data length from disk with error: %@", self.logTag, error);
|
||||
self.cachedDataLength = @(0);
|
||||
} else {
|
||||
uint64_t fileSize = [attributes fileSize];
|
||||
@ -375,8 +379,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *error;
|
||||
BOOL success = [[NSFileManager defaultManager] copyItemAtPath:self.filePath toPath:dstFilePath error:&error];
|
||||
if (!success || error) {
|
||||
OWSFail(
|
||||
DDLogDebug(
|
||||
@"%@ Could not write data from path: %@, to path: %@, %@", self.logTag, self.filePath, dstFilePath, error);
|
||||
OWSFail(@"%@ Could not write data with error: %@", self.logTag, error);
|
||||
return NO;
|
||||
} else {
|
||||
return YES;
|
||||
|
||||
@ -212,8 +212,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
return YES;
|
||||
} else if (range.location != index || range.length < 1) {
|
||||
// This should never happen.
|
||||
OWSFail(
|
||||
@"%@ unexpected composed character sequence: %lu, %@", self.logTag, (unsigned long)index, NSStringFromRange(range));
|
||||
OWSFail(@"%@ unexpected composed character sequence: %lu, %@",
|
||||
self.logTag,
|
||||
(unsigned long)index,
|
||||
NSStringFromRange(range));
|
||||
return YES;
|
||||
}
|
||||
index = range.location + range.length;
|
||||
|
||||
@ -19,55 +19,56 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// OWSCAssert() and OWSCFail() should be used in free functions.
|
||||
|
||||
#define OWSAssert(X) \
|
||||
if (!(X)) { \
|
||||
DDLogError(@"%s Assertion failed: %s", __PRETTY_FUNCTION__, CONVERT_EXPR_TO_STRING(X)); \
|
||||
[DDLog flushLog]; \
|
||||
NSAssert(0, @"Assertion failed: %s", CONVERT_EXPR_TO_STRING(X)); \
|
||||
}
|
||||
do { \
|
||||
if (!(X)) { \
|
||||
DDLogError(@"%s Assertion failed: %s", __PRETTY_FUNCTION__, CONVERT_EXPR_TO_STRING(X)); \
|
||||
[DDLog flushLog]; \
|
||||
NSAssert(0, @"Assertion failed: %s", CONVERT_EXPR_TO_STRING(X)); \
|
||||
} \
|
||||
} while (NO)
|
||||
|
||||
#define OWSCAssert(X) \
|
||||
if (!(X)) { \
|
||||
DDLogError(@"%s Assertion failed: %s", __PRETTY_FUNCTION__, CONVERT_EXPR_TO_STRING(X)); \
|
||||
[DDLog flushLog]; \
|
||||
NSCAssert(0, @"Assertion failed: %s", CONVERT_EXPR_TO_STRING(X)); \
|
||||
}
|
||||
do { \
|
||||
if (!(X)) { \
|
||||
DDLogError(@"%s Assertion failed: %s", __PRETTY_FUNCTION__, CONVERT_EXPR_TO_STRING(X)); \
|
||||
[DDLog flushLog]; \
|
||||
NSCAssert(0, @"Assertion failed: %s", CONVERT_EXPR_TO_STRING(X)); \
|
||||
} \
|
||||
} while (NO)
|
||||
|
||||
#define OWSFail(message, ...) \
|
||||
{ \
|
||||
#define OWSFailWithoutLogging(message, ...) \
|
||||
do { \
|
||||
NSString *formattedMessage = [NSString stringWithFormat:message, ##__VA_ARGS__]; \
|
||||
DDLogError(@"%s %@", __PRETTY_FUNCTION__, formattedMessage); \
|
||||
[DDLog flushLog]; \
|
||||
NSAssert(0, formattedMessage); \
|
||||
}
|
||||
} while (NO)
|
||||
|
||||
#define OWSCFail(message, ...) \
|
||||
{ \
|
||||
|
||||
#define OWSCFailWithoutLogging(message, ...) \
|
||||
do { \
|
||||
NSString *formattedMessage = [NSString stringWithFormat:message, ##__VA_ARGS__]; \
|
||||
DDLogError(@"%s %@", __PRETTY_FUNCTION__, formattedMessage); \
|
||||
[DDLog flushLog]; \
|
||||
NSCAssert(0, formattedMessage); \
|
||||
}
|
||||
} while (NO)
|
||||
|
||||
#define OWSFailNoFormat(message) \
|
||||
{ \
|
||||
do { \
|
||||
DDLogError(@"%s %@", __PRETTY_FUNCTION__, message); \
|
||||
[DDLog flushLog]; \
|
||||
NSAssert(0, message); \
|
||||
}
|
||||
} while (NO)
|
||||
|
||||
#define OWSCFailNoFormat(message) \
|
||||
{ \
|
||||
do { \
|
||||
DDLogError(@"%s %@", __PRETTY_FUNCTION__, message); \
|
||||
[DDLog flushLog]; \
|
||||
NSCAssert(0, message); \
|
||||
}
|
||||
} while (NO)
|
||||
|
||||
#else
|
||||
|
||||
#define OWSAssert(X)
|
||||
#define OWSCAssert(X)
|
||||
#define OWSFail(message, ...)
|
||||
#define OWSCFail(message, ...)
|
||||
#define OWSFailWithoutLogging(message, ...)
|
||||
#define OWSCFailWithoutLogging(message, ...)
|
||||
#define OWSFailNoFormat(X)
|
||||
#define OWSCFailNoFormat(X)
|
||||
|
||||
@ -75,7 +76,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#endif
|
||||
|
||||
#define OWS_ABSTRACT_METHOD() OWSFail(@"%@ Method needs to be implemented by subclasses.", self.logTag)
|
||||
#define OWSAbstractMethod() OWSFail(@"%@ Method needs to be implemented by subclasses.", self.logTag)
|
||||
|
||||
#pragma mark - Singleton Asserts
|
||||
|
||||
@ -123,19 +124,19 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// This macro is intended for use in Objective-C.
|
||||
#define OWSAssertIsOnMainThread() OWSCAssert([NSThread isMainThread])
|
||||
|
||||
#define OWSProdLogAndFail(_messageFormat, ...) \
|
||||
{ \
|
||||
#define OWSFail(_messageFormat, ...) \
|
||||
do { \
|
||||
DDLogError(_messageFormat, ##__VA_ARGS__); \
|
||||
[DDLog flushLog]; \
|
||||
OWSFail(_messageFormat, ##__VA_ARGS__); \
|
||||
}
|
||||
OWSFailWithoutLogging(_messageFormat, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define OWSProdLogAndCFail(_messageFormat, ...) \
|
||||
{ \
|
||||
#define OWSCFail(_messageFormat, ...) \
|
||||
do { \
|
||||
DDLogError(_messageFormat, ##__VA_ARGS__); \
|
||||
[DDLog flushLog]; \
|
||||
OWSCFail(_messageFormat, ##__VA_ARGS__); \
|
||||
}
|
||||
OWSCFailWithoutLogging(_messageFormat, ##__VA_ARGS__); \
|
||||
} while (NO)
|
||||
|
||||
|
||||
// Avoids Clang analyzer warning:
|
||||
@ -154,23 +155,23 @@ __attribute__((annotate("returns_localized_nsstring"))) static inline NSString *
|
||||
void SwiftAssertIsOnMainThread(NSString *functionName);
|
||||
|
||||
#define OWSRaiseException(name, formatParam, ...) \
|
||||
{ \
|
||||
do { \
|
||||
DDLogError(@"Exception: %@ %@", name, [NSString stringWithFormat:formatParam, ##__VA_ARGS__]); \
|
||||
[DDLog flushLog]; \
|
||||
@throw [NSException exceptionWithName:name \
|
||||
reason:[NSString stringWithFormat:formatParam, ##__VA_ARGS__] \
|
||||
userInfo:nil]; \
|
||||
}
|
||||
} while (NO)
|
||||
|
||||
#define OWSRaiseExceptionWithUserInfo(name, userInfoParam, formatParam, ...) \
|
||||
{ \
|
||||
do { \
|
||||
DDLogError( \
|
||||
@"Exception: %@ %@ %@", name, userInfoParam, [NSString stringWithFormat:formatParam, ##__VA_ARGS__]); \
|
||||
[DDLog flushLog]; \
|
||||
@throw [NSException exceptionWithName:name \
|
||||
reason:[NSString stringWithFormat:formatParam, ##__VA_ARGS__] \
|
||||
userInfo:userInfoParam]; \
|
||||
}
|
||||
} while (NO)
|
||||
|
||||
|
||||
// UI JANK
|
||||
|
||||
@ -71,7 +71,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
BOOL isDirectory;
|
||||
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDirectory];
|
||||
if (!exists) {
|
||||
OWSFail(@"%@ error retrieving file attributes for issing file", self.logTag);
|
||||
OWSFail(@"%@ error retrieving file attributes for missing file", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -137,11 +137,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *_Nullable error;
|
||||
BOOL success = [fileManager moveItemAtPath:oldFilePath toPath:newFilePath error:&error];
|
||||
if (!success || error) {
|
||||
OWSProdLogAndFail(@"%@ Could not move file or directory from: %@ to: %@, error: %@",
|
||||
DDLogDebug(@"%@ Could not move file or directory from: %@ to: %@, error: %@",
|
||||
self.logTag,
|
||||
oldFilePath,
|
||||
newFilePath,
|
||||
error);
|
||||
OWSFail(@"%@ Could not move file or directory with error: %@", self.logTag, error);
|
||||
return error;
|
||||
}
|
||||
return nil;
|
||||
@ -166,10 +167,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
|
||||
if ([fileManager fileExistsAtPath:newFilePath]) {
|
||||
OWSProdLogAndFail(@"%@ Can't move file or directory from: %@ to: %@; destination already exists.",
|
||||
DDLogDebug(@"%@ Can't move file or directory from: %@ to: %@; destination already exists.",
|
||||
self.logTag,
|
||||
oldFilePath,
|
||||
newFilePath);
|
||||
OWSFail(@"%@ Can't move file or directory; destination already exists.", self.logTag);
|
||||
return OWSErrorWithCodeDescription(
|
||||
OWSErrorCodeMoveFileToSharedDataContainerError, @"Can't move file; destination already exists.");
|
||||
}
|
||||
@ -179,15 +181,17 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
NSError *_Nullable error;
|
||||
BOOL success = [fileManager moveItemAtPath:oldFilePath toPath:newFilePath error:&error];
|
||||
if (!success || error) {
|
||||
OWSProdLogAndFail(@"%@ Could not move file or directory from: %@ to: %@, error: %@",
|
||||
DDLogDebug(@"%@ Could not move file or directory from: %@ to: %@, error: %@",
|
||||
self.logTag,
|
||||
oldFilePath,
|
||||
newFilePath,
|
||||
error);
|
||||
OWSFail(@"%@ Could not move file or directory with error: %@", self.logTag, error);
|
||||
return error;
|
||||
}
|
||||
|
||||
DDLogInfo(@"%@ Moved file or directory from: %@ to: %@ in: %f",
|
||||
DDLogInfo(@"%@ Moved file or directory in: %f", self.logTag, fabs([startDate timeIntervalSinceNow]));
|
||||
DDLogDebug(@"%@ Moved file or directory from: %@ to: %@ in: %f",
|
||||
self.logTag,
|
||||
oldFilePath,
|
||||
newFilePath,
|
||||
|
||||
@ -71,7 +71,7 @@ NSString *const OWSOperationKeyIsFinished = @"isFinished";
|
||||
// Called every retry, this is where the bulk of the operation's work should go.
|
||||
- (void)run
|
||||
{
|
||||
OWSFail(@"%@ Abstract method", self.logTag);
|
||||
OWSAbstractMethod();
|
||||
}
|
||||
|
||||
// Called at most one time.
|
||||
|
||||
@ -210,7 +210,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (void)runNowOrWhenMainAppIsActive:(AppActiveBlock)block
|
||||
{
|
||||
OWSProdLogAndFail(@"%@ cannot run main app active blocks in share extension.", self.logTag);
|
||||
OWSFail(@"%@ cannot run main app active blocks in share extension.", self.logTag);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user