Skip to content

Commit

Permalink
[Issue #2015][Issue AFNetworking#2040] Define AF_Require_noErr macro,…
Browse files Browse the repository at this point in the history
… to avoid compiler warning for __Require_noErr
  • Loading branch information
mattt committed May 11, 2014
1 parent ddae2e0 commit de8b20f
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions AFNetworking/AFSecurityPolicy.m
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,31 @@

#import "AFSecurityPolicy.h"

#import <AssertMacros.h>
// Equivalent of macro in <AssertMacros.h>, without causing compiler warning:
// "'DebugAssert' is deprecated: first deprecated in OS X 10.8"
#ifndef AF_Require_noErr
#define AF_Require_noErr(errorCode, exceptionLabel) \
do { \
if (__builtin_expect(0 != (errorCode), 0)) { \
goto exceptionLabel; \
} \
} while (0)
#endif

#if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
static NSData * AFSecKeyGetData(SecKeyRef key) {
CFDataRef data = NULL;

OSStatus status = SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data);
NSCAssert(status == errSecSuccess, @"SecItemExport error: %ld", (long int)status);
if (status != errSecSuccess) {
if (data) {
CFRelease(data);
}
AF_Require_noErr(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out);

return nil;
return (__bridge_transfer NSData *)data;

_out:
if (data) {
CFRelease(data);
}

return (__bridge_transfer NSData *)data;
return nil;
}
#endif

Expand All @@ -59,10 +67,10 @@ static id AFPublicKeyForCertificate(NSData *certificate) {

SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustRef allowedTrust;
__Require_noErr(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out);
AF_Require_noErr(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out);

SecTrustResultType result;
__Require_noErr(SecTrustEvaluate(allowedTrust, &result), _out);
AF_Require_noErr(SecTrustEvaluate(allowedTrust, &result), _out);

allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust);

Expand All @@ -89,7 +97,7 @@ static id AFPublicKeyForCertificate(NSData *certificate) {
static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) {
BOOL isValid = NO;
SecTrustResultType result;
__Require_noErr(SecTrustEvaluate(serverTrust, &result), _out);
AF_Require_noErr(SecTrustEvaluate(serverTrust, &result), _out);

isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed);

Expand Down Expand Up @@ -120,10 +128,10 @@ static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) {
CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL);

SecTrustRef trust;
__Require_noErr(SecTrustCreateWithCertificates(certificates, policy, &trust), _out);
AF_Require_noErr(SecTrustCreateWithCertificates(certificates, policy, &trust), _out);

SecTrustResultType result;
__Require_noErr(SecTrustEvaluate(trust, &result), _out);
AF_Require_noErr(SecTrustEvaluate(trust, &result), _out);

[trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)];

Expand Down

0 comments on commit de8b20f

Please sign in to comment.