Same diff as for RSA_print(). Old version leaks when EVP_PKEY_set1_DSA() fails.
ok? Index: dsa/dsa_prn.c =================================================================== RCS file: /cvs/src/lib/libcrypto/dsa/dsa_prn.c,v retrieving revision 1.6 diff -u -p -r1.6 dsa_prn.c --- dsa/dsa_prn.c 29 Jan 2017 17:49:22 -0000 1.6 +++ dsa/dsa_prn.c 8 Nov 2022 17:22:08 -0000 @@ -98,12 +98,16 @@ int DSA_print(BIO *bp, const DSA *x, int off) { EVP_PKEY *pk; - int ret; + int ret = 0; + + if ((pk = EVP_PKEY_new()) == NULL) + goto out; + + if (!EVP_PKEY_set1_DSA(pk, (DSA *)x)) + goto out; - pk = EVP_PKEY_new(); - if (!pk || !EVP_PKEY_set1_DSA(pk, (DSA *)x)) - return 0; ret = EVP_PKEY_print_private(bp, pk, off, NULL); + out: EVP_PKEY_free(pk); return ret; }