为什么“SecStaticCodeCheckValidity”方法钻我的记忆?

时间:2017-02-14 00:51:17

标签: objective-c macos security codesign

我有一个验证代码签名的应用程序。我正在使用SecStaticCodeCheckValidity来检查签名是否有效。在我调用方法之前,我的内存占用量相对较小,但在方法完成后,我的内存占用率几乎翻了一倍,我不知道到底发生了什么。

    OSStatus errorCode=SecStaticCodeCheckValidity(_codeReference, kSecCSConsiderExpiration,NULL);
    CFRelease(_codeReference);
    switch(errorCode)
    {
            case errSecInvalidRoot:validity=INVALID;
                break;
            case errSecCRLNotValidYet:validity=NOT_VALID_YET;
                break;
            case errSecCertificateRevoked:validity=REVOKED;
                break;
            case errSecCertificateExpired:validity=EXPIRED;
                break;
            case errSecSuccess:_signatureValidity=VALID;
                break;
            default: validity=BROKEN;
                break;
    }

现在,当我发布“_codeReference”时,我应该释放什么?

更新

#import <Foundation/Foundation.h>
#import <Security/Security.h>
int main(int argc, const char * argv[]) {
    SecStaticCodeRef codeRef;
    CFURLRef appURL=CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/Applications/Xcode.app"), kCFURLPOSIXPathStyle, YES);
    SecStaticCodeCreateWithPath(appURL, kSecCSDefaultFlags, &codeRef);
    CFRelease(appURL);
    CFDictionaryRef signDic;
    SecCodeCopySigningInformation(codeRef, kSecCSSigningInformation, &signDic);
    if(!CFDictionaryContainsKey(signDic,kSecCodeInfoIdentifier))
    {
        NSLog(@"Bundle not signed....");
        return 0;
    }
    CFRelease(signDic);
    //Verify signature
    OSStatus code=SecStaticCodeCheckValidity(codeRef, kSecCSConsiderExpiration, NULL);
    CFRelease(codeRef);
    NSString*output;
    switch(code)
    {
        case errSecInvalidRoot:output=@"INVALID";
            break;
        case errSecCRLNotValidYet:output=@"NOT_VALID_YET";
            break;
        case errSecCertificateRevoked:output=@"REVOKED";
            break;
        case errSecCertificateExpired:output=@"EXPIRED";
            break;
        case errSecSuccess:output=@"VALID";
            break;
        default: output=@"BROKEN";
            break;
    }
    NSLog(@"%@",output);
    return 0;
}

我更新了我的SampleApplication并监控了仪器中的应用程序。 enter image description here 这意味着我在代码中没有正确释放内存。

1 个答案:

答案 0 :(得分:0)

在我重写我的代码以使用ARC之后,所有内存问题都消失了。所以对象没有被正确释放实际上是我的错。