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

Reply via email to