Skip to content

Commit

Permalink
Compiler setting changes and fix all warnings (#202)
Browse files Browse the repository at this point in the history
* Hardcore compiler settings
* Fix all compiler warnings
* Fix issues caught by static analyser
* Add stub storyboard
  • Loading branch information
Tatsh authored Jan 20, 2018
1 parent 97c5b03 commit b3979b6
Show file tree
Hide file tree
Showing 46 changed files with 416 additions and 273 deletions.
143 changes: 116 additions & 27 deletions Clutch.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
/* Begin PBXFileReference section */
266FD1661E1D7C6200935807 /* Clutch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Clutch.app; sourceTree = BUILT_PRODUCTS_DIR; };
266FD19F1E1D7CFF00935807 /* libncurses.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libncurses.tbd; path = usr/lib/libncurses.tbd; sourceTree = SDKROOT; };
269A62DD200FBF300001EC06 /* Stub.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Stub.storyboard; sourceTree = "<group>"; };
26AB70591E1D81D400BDAE34 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
26AB705B1E1D857E00BDAE34 /* Clutch-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Clutch-Prefix.pch"; sourceTree = "<group>"; };
26AB705F1E1D8E5C00BDAE34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
Expand Down Expand Up @@ -273,6 +274,7 @@
326E8D2D1AE53DED00DCDD64 /* NSBundle+Clutch.m */,
328CCB3B1ACECF5800B21225 /* README.md */,
323C86AB1AC03E3F008949F2 /* .gitignore */,
269A62DD200FBF300001EC06 /* Stub.storyboard */,
);
name = "Supporting Files";
sourceTree = "<group>";
Expand Down Expand Up @@ -443,7 +445,7 @@
324EA61B1A89258000844540 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0810;
LastUpgradeCheck = 0920;
TargetAttributes = {
266FD1651E1D7C6200935807 = {
CreatedOnToolsVersion = 8.2.1;
Expand Down Expand Up @@ -552,73 +554,148 @@
266FD17B1E1D7C6200935807 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ADDRESS_SANITIZER_CONTAINER_OVERFLOW = YES;
CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_INTEGER = YES;
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES;
CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES_ERROR;
CLANG_WARN_BOOL_CONVERSION = YES_ERROR;
CLANG_WARN_COMMA = YES_ERROR;
CLANG_WARN_CONSTANT_CONVERSION = YES_ERROR;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_ENUM_CONVERSION = YES_ERROR;
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES_ERROR;
CLANG_WARN_INT_CONVERSION = YES_ERROR;
CLANG_WARN_OBJC_EXPLICIT_OWNERSHIP_TYPE = YES;
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES_ERROR;
CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES_ERROR;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;
CODE_SIGN_ENTITLEMENTS = Clutch/Clutch.entitlements;
CODE_SIGN_IDENTITY = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CREATE_INFOPLIST_SECTION_IN_BINARY = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = EU5R2QY9HJ;
GCC_CW_ASM_SYNTAX = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_PREFIX_HEADER = "Clutch/Clutch-Prefix.pch";
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES_ERROR;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_PEDANTIC = YES;
GCC_WARN_SHADOW = YES;
GCC_WARN_SIGN_COMPARE = YES;
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_EXPAND_BUILD_SETTINGS = NO;
GCC_WARN_UNKNOWN_PRAGMAS = YES;
GCC_WARN_UNUSED_LABEL = YES;
GCC_WARN_UNUSED_PARAMETER = YES;
INFOPLIST_FILE = Clutch/Info.plist;
INFOPLIST_OUTPUT_FORMAT = XML;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
OTHER_LDFLAGS = "-v";
OTHER_CFLAGS = "-Wno-gnu-statement-expression";
PRODUCT_BUNDLE_IDENTIFIER = kjc.Clutch;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
VALIDATE_PRODUCT = NO;
};
name = Debug;
};
266FD17C1E1D7C6200935807 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_INTEGER = YES;
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES;
CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES_ERROR;
CLANG_WARN_BOOL_CONVERSION = YES_ERROR;
CLANG_WARN_COMMA = YES_ERROR;
CLANG_WARN_CONSTANT_CONVERSION = YES_ERROR;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_ENUM_CONVERSION = YES_ERROR;
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES_ERROR;
CLANG_WARN_INT_CONVERSION = YES_ERROR;
CLANG_WARN_OBJC_EXPLICIT_OWNERSHIP_TYPE = YES;
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES_ERROR;
CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES_ERROR;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;
CODE_SIGN_ENTITLEMENTS = Clutch/Clutch.entitlements;
CODE_SIGN_IDENTITY = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CREATE_INFOPLIST_SECTION_IN_BINARY = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = EU5R2QY9HJ;
ENABLE_NS_ASSERTIONS = NO;
GCC_CW_ASM_SYNTAX = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_PREFIX_HEADER = "Clutch/Clutch-Prefix.pch";
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES_ERROR;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_PEDANTIC = YES;
GCC_WARN_SHADOW = YES;
GCC_WARN_SIGN_COMPARE = YES;
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_EXPAND_BUILD_SETTINGS = NO;
GCC_WARN_UNKNOWN_PRAGMAS = YES;
GCC_WARN_UNUSED_LABEL = YES;
GCC_WARN_UNUSED_PARAMETER = YES;
INFOPLIST_FILE = Clutch/Info.plist;
INFOPLIST_OUTPUT_FORMAT = XML;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_LDFLAGS = "-v";
OTHER_CFLAGS = "-Wno-gnu-statement-expression";
PRODUCT_BUNDLE_IDENTIFIER = kjc.Clutch;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
VALIDATE_PRODUCT = NO;
};
name = Release;
Expand Down Expand Up @@ -676,12 +753,18 @@
324EA6351A89258000844540 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
Expand Down Expand Up @@ -716,12 +799,18 @@
324EA6361A89258000844540 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
Expand Down
4 changes: 3 additions & 1 deletion Clutch.xcodeproj/xcshareddata/xcschemes/Clutch.xcscheme
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0810"
LastUpgradeVersion = "0920"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand All @@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
Expand Down Expand Up @@ -55,6 +56,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
Expand Down
7 changes: 4 additions & 3 deletions Clutch/ARM64Dumper.m
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ - (BOOL)dumpBinary {

[[ClutchPrint sharedInstance] printDeveloper: @"64bit dumping: arch %@ offset %u", [Dumper readableArchFromHeader:_thinHeader], _thinHeader.offset];

for (int i = 0; i < _thinHeader.header.ncmds; i++) {
for (unsigned int i = 0; i < _thinHeader.header.ncmds; i++) {

uint32_t cmd = [newFileHandle intAtOffset:newFileHandle.offsetInFile];
uint32_t size = [newFileHandle intAtOffset:newFileHandle.offsetInFile+sizeof(uint32_t)];
Expand Down Expand Up @@ -160,8 +160,9 @@ - (BOOL)dumpBinary {

if ((_thinHeader.header.flags & MH_PIE) && !self.shouldDisableASLR)
{
mach_vm_address_t main_address = [ASLRDisabler slideForPID:pid];
if(main_address == -1) {
NSError *error = nil;
mach_vm_address_t main_address = [ASLRDisabler slideForPID:pid error:&error];
if(error) {
[[ClutchPrint sharedInstance] printColor:ClutchPrinterColorPurple format:@"Failed to find address of header!"];
goto gotofail;
}
Expand Down
7 changes: 4 additions & 3 deletions Clutch/ARMDumper.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ - (BOOL)dumpBinary {

[[ClutchPrint sharedInstance] printDeveloper: @"32bit Dumping: arch %@ offset %u", [Dumper readableArchFromHeader:_thinHeader], _thinHeader.offset];

for (int i = 0; i < _thinHeader.header.ncmds; i++) {
for (unsigned int i = 0; i < _thinHeader.header.ncmds; i++) {

uint32_t cmd = [newFileHandle intAtOffset:newFileHandle.offsetInFile];
uint32_t size = [newFileHandle intAtOffset:newFileHandle.offsetInFile+sizeof(uint32_t)];
Expand Down Expand Up @@ -163,8 +163,9 @@ - (BOOL)dumpBinary {

if ((_thinHeader.header.flags & MH_PIE) && !self.shouldDisableASLR)
{
mach_vm_address_t main_address = [ASLRDisabler slideForPID:pid];
if(main_address == -1) {
NSError *error = nil;
mach_vm_address_t main_address = [ASLRDisabler slideForPID:pid error:&error];
if(error) {
[[ClutchPrint sharedInstance] printError:@"Failed to find address of header!"];
goto gotofail;
}
Expand Down
2 changes: 1 addition & 1 deletion Clutch/ASLRDisabler.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@

@interface ASLRDisabler : NSObject

+ (mach_vm_address_t)slideForPID:(pid_t)pid;
+ (mach_vm_address_t)slideForPID:(pid_t)pid error:(NSError **)error;

@end
40 changes: 25 additions & 15 deletions Clutch/ASLRDisabler.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,46 +19,56 @@

@implementation ASLRDisabler

+ (mach_vm_address_t)slideForPID:(pid_t)pid {
+ (mach_vm_address_t)slideForPID:(pid_t)pid error:(NSError * __autoreleasing *)error {
vm_map_t targetTask = 0;
kern_return_t kr = 0;
if (task_for_pid(mach_task_self(), pid, &targetTask))
{
if (task_for_pid(mach_task_self(), pid, &targetTask)) {
[[ClutchPrint sharedInstance] printError:@"Can't execute task_for_pid! Do you have the right permissions/entitlements?"];
return -1;
NSDictionary<NSErrorUserInfoKey, NSString *> *userInfo = @{
NSLocalizedDescriptionKey: @"Failed to execute task_for_pid",
};
if (error) {
*error = [NSError errorWithDomain:NSMachErrorDomain code:-1 userInfo:userInfo];
}
return 0;
}

vm_address_t iter = 0;
while (1)
{
while (1) {
struct mach_header mh = {0};
vm_address_t addr = iter;
vm_size_t lsize = 0;
uint32_t depth;
mach_vm_size_t bytes_read = 0;
struct vm_region_submap_info_64 info;
mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64;
if (vm_region_recurse_64(targetTask, &addr, &lsize, &depth, (vm_region_info_t)&info, &count))
{

if (vm_region_recurse_64(targetTask, &addr, &lsize, &depth, (vm_region_info_t)&info, &count)) {
break;
}

kr = mach_vm_read_overwrite(targetTask, (mach_vm_address_t)addr, (mach_vm_size_t)sizeof(struct mach_header), (mach_vm_address_t)&mh, &bytes_read);
if (kr == KERN_SUCCESS && bytes_read == sizeof(struct mach_header))
{

if (kr == KERN_SUCCESS && bytes_read == sizeof(struct mach_header)) {
/* only one image with MH_EXECUTE filetype */
if ((mh.magic == MH_MAGIC || mh.magic == MH_MAGIC_64) && mh.filetype == MH_EXECUTE)
{
if ((mh.magic == MH_MAGIC || mh.magic == MH_MAGIC_64) && mh.filetype == MH_EXECUTE) {
#if DEBUG
[[ClutchPrint sharedInstance] printDeveloper:@"Found main binary mach-o image @ %p!", (void*)addr];
[[ClutchPrint sharedInstance] printDeveloper:@"Found main binary mach-o image @ %p!", (void *)addr];
#endif
return addr;
break;
}
}

iter = addr + lsize;
}

return -1;
NSDictionary<NSErrorUserInfoKey, NSString *> *userInfo = @{
NSLocalizedDescriptionKey: @"Should not reach here",
};
if (error) {
*error = [NSError errorWithDomain:NSMachErrorDomain code:-1 userInfo:userInfo];
}
return 0;
}

@end
Loading

0 comments on commit b3979b6

Please sign in to comment.