commit 500ea6d4e3c9b60a442cf1bdd4f493026dcf3a5e from: Martijn van Duren date: Thu Jan 27 21:13:10 2022 UTC Clean up some memory leaks in error paths Found/inspired by Peter J Philipp commit - 9250b3969882720bf06e9974604ed10a23942830 commit + 500ea6d4e3c9b60a442cf1bdd4f493026dcf3a5e blob - ec53ec5c5468b187187fe6f3239c646c508d29f4 blob + 6e3bee7c5f62afa22685453206abc72833040b0a --- main.c +++ main.c @@ -321,9 +321,7 @@ dkim_message_new(struct osmtpd_ctx *ctx) } return message; fail: - free(message->headers); - EVP_MD_CTX_free(message->dctx); - free(message); + dkim_message_free(ctx, message); return NULL; } @@ -336,7 +334,8 @@ dkim_message_free(struct osmtpd_ctx *ctx, void *data) fclose(message->origf); EVP_MD_CTX_free(message->dctx); free(message->signature.signature); - for (i = 0; message->headers[i] != NULL; i++) + for (i = 0; message->headers != NULL && + message->headers[i] != NULL; i++) free(message->headers[i]); free(message->headers); free(message); @@ -478,7 +477,10 @@ dkim_parse_header(struct dkim_message *message, char * } message->headers = mtmp; - message->headers[lastheader] = strdup(line); + if ((message->headers[lastheader] = strdup(line)) == NULL) { + dkim_err(message, "Can't store header"); + return; + } message->headers[lastheader + 1 ] = NULL; message->lastheader = 1; } else {