commit - 71b92702b7827c82cd50c8a72db9b3d05dadfbd4
commit + 41815bccaee3b630bfc23a1a4764aa42f1aab87d
blob - ecc7ebb0c6a6e1dc2a8fc0a10e6afde5fc736e27
blob + 5d552f3936d3170a270cc6b9898fd013416caf6b
--- main.c
+++ main.c
{
struct dkim_message *message;
- if ((message = calloc(1, sizeof(*message))) == NULL)
- osmtpd_err(1, NULL);
+ if ((message = calloc(1, sizeof(*message))) == NULL) {
+ dkim_err(message, "Failed to create message context");
+ return NULL;
+ }
if ((message->origf = tmpfile()) == NULL) {
- dkim_err(message, "Can't open tempfile");
- return NULL;
+ dkim_err(message, "Failed to open tempfile");
+ goto fail;
}
message->parsing_headers = 1;
message->headers = calloc(1, sizeof(*(message->headers)));
if (message->headers == NULL) {
dkim_err(message, "Can't save headers");
- return NULL;
+ goto fail;
}
message->lastheader = 0;
message->signature.signature = NULL;
cryptalg, hashalg,
canonheader == CANON_SIMPLE ? "simple" : "relaxed",
canonbody == CANON_SIMPLE ? "simple" : "relaxed", selector))
- return NULL;
+ goto fail;
if (addheaders > 0 && !dkim_signature_printf(message, "z="))
- return NULL;
+ goto fail;
if ((message->b = EVP_MD_CTX_new()) == NULL ||
(message->bh = EVP_MD_CTX_new()) == NULL) {
- dkim_errx(message, "Can't create hash context");
- return NULL;
+ dkim_errx(message, "Failed to create hash context");
+ goto fail;
}
if (EVP_DigestSignInit(message->b, NULL, hash_md, NULL, pkey) <= 0 ||
EVP_DigestInit_ex(message->bh, hash_md, NULL) == 0) {
dkim_errx(message, "Failed to initialize hash context");
- return NULL;
+ goto fail;
}
return message;
+fail:
+ free(message->headers);
+ EVP_MD_CTX_free(message->b);
+ EVP_MD_CTX_free(message->bh);
+ free(message);
+ return NULL;
}
void