2017-02-14 6 views
1

私はコード署名を検証するアプリケーションを持っています。 SecStaticCodeCheckValidityを使用して、署名が有効かどうかを確認しています。私がメソッドを呼び出す前に、私は比較的小さなメモリフットプリントしか持っていませんが、メソッドの実行が終了した後、私のメモリフットプリントはほぼ倍増しています。"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」をリリースしたときに解除することが出来るのですか?

UPDATE:

#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:[email protected]"INVALID"; 
      break; 
     case errSecCRLNotValidYet:[email protected]"NOT_VALID_YET"; 
      break; 
     case errSecCertificateRevoked:[email protected]"REVOKED"; 
      break; 
     case errSecCertificateExpired:[email protected]"EXPIRED"; 
      break; 
     case errSecSuccess:[email protected]"VALID"; 
      break; 
     default: [email protected]"BROKEN"; 
      break; 
    } 
    NSLog(@"%@",output); 
    return 0; 
} 

私はSampleApplicationを更新し、楽器にアプリを監視しています。 enter image description here これは、自分のコードでメモリを正しく解放していないことを意味します。

+1

実際に漏れていることをどのように知っていますか? –

+0

私はActivity MonitorとXcodeでメモリを監視しています。 Xcodeでは、デバッグにメモリグラフを使用しています。私はちょうどcodesignでシェル上で検証を実行できると思ったが、残念ながらcodesignも同じ問題を抱えているようだ。 – ok404

+1

'codesign'は継続的に実行されていません。実行して終了します。それは漏れているはずですが、上記のコードには何もありません。動作のデバッグログがある場合は、質問を投稿することをお勧めします。 –

答えて

0

私はARCを使用するコードを書き直した後、すべてのメモリの問題はなくなりました。実際にオブジェクトが適切にリリースされなかったのは実際は自分の過ちでした。

関連する問題