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;
}