/* * Dispose of a CMSDecoder. Called out from CFRelease(). */ static void cmsDecoderFinalize( CFTypeRef dec) { CMSDecoderRef cmsDecoder = (CMSDecoderRef)dec; if(cmsDecoder == NULL) { return; } if(cmsDecoder->decoder != NULL) { /* * Normally this gets freed in SecCmsDecoderFinish - this is * an error case. * FIXME: SecCmsDecoderDestroy() appears to destroy the * cmsMsg too! Plus there's a comment there re: a leak... */ SecCmsDecoderDestroy(cmsDecoder->decoder); } CFRELEASE(cmsDecoder->detachedContent); CFRELEASE(cmsDecoder->keychainOrArray); if(cmsDecoder->cmsMsg != NULL) { SecCmsMessageDestroy(cmsDecoder->cmsMsg); } if(cmsDecoder->arena != NULL) { SecArenaPoolFree(cmsDecoder->arena, false); } }
/* * Dispose of a CMSEncoder. Called out from CFRelease(). */ static void cmsEncoderFinalize( CFTypeRef enc) { CMSEncoderRef cmsEncoder = (CMSEncoderRef)enc; if(cmsEncoder == NULL) { return; } if(cmsEncoder->eContentType.Data != NULL) { free(cmsEncoder->eContentType.Data); } CFRELEASE(cmsEncoder->signers); CFRELEASE(cmsEncoder->recipients); CFRELEASE(cmsEncoder->otherCerts); if(cmsEncoder->cmsMsg != NULL) { SecCmsMessageDestroy(cmsEncoder->cmsMsg); cmsEncoder->cmsMsg = NULL; } if(cmsEncoder->arena != NULL) { SecArenaPoolFree(cmsEncoder->arena, false); } if(cmsEncoder->encoder != NULL) { /* * Normally this gets freed in SecCmsEncoderFinish - this is * an error case. */ SecCmsEncoderDestroy(cmsEncoder->encoder); } }