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を更新し、楽器にアプリを監視しています。 これは、自分のコードでメモリを正しく解放していないことを意味します。
実際に漏れていることをどのように知っていますか? –
私はActivity MonitorとXcodeでメモリを監視しています。 Xcodeでは、デバッグにメモリグラフを使用しています。私はちょうどcodesignでシェル上で検証を実行できると思ったが、残念ながらcodesignも同じ問題を抱えているようだ。 – ok404
'codesign'は継続的に実行されていません。実行して終了します。それは漏れているはずですが、上記のコードには何もありません。動作のデバッグログがある場合は、質問を投稿することをお勧めします。 –