Hi all, It happens that pgcrypto has the following leak if a digest cannot be initialized: --- a/contrib/pgcrypto/openssl.c +++ b/contrib/pgcrypto/openssl.c @@ -202,6 +202,7 @@ px_find_digest(const char *name, PX_MD **res) } if (EVP_DigestInit_ex(ctx, md, NULL) == 0) { + EVP_MD_CTX_destroy(ctx); pfree(digest); return -1; }
That's a bit annoying, because this memory is allocated directly by OpenSSL, and Postgres does not know how to free it until it gets registered in the list of open_digests that would be used by the cleanup callback, so I think that we had better back-patch this fix. Thoughts? -- Michael
diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c index 90951a8ae7..ed96e4ce53 100644 --- a/contrib/pgcrypto/openssl.c +++ b/contrib/pgcrypto/openssl.c @@ -202,6 +202,7 @@ px_find_digest(const char *name, PX_MD **res) } if (EVP_DigestInit_ex(ctx, md, NULL) == 0) { + EVP_MD_CTX_destroy(ctx); pfree(digest); return -1; }
signature.asc
Description: PGP signature