summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-01-04 09:32:17 +0100
committerNikos Mavrogiannopoulos <nmav@redhat.com>2017-01-04 13:41:43 +0100
commitc9c189038d8a80b4e676479465ab75a3efd9a7ea (patch)
tree0002a5097b470db002acb8fc612da4fa26e671e2
parentc6af27511f3568b81675965c6907bf0c45725bcd (diff)
downloadgnutls-c9c189038d8a80b4e676479465ab75a3efd9a7ea.tar.gz
_decode_pkcs8_dsa_key: fixed memory leak on error path
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r--lib/x509/privkey_pkcs8.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/x509/privkey_pkcs8.c b/lib/x509/privkey_pkcs8.c
index f7ada0234b..4e1e2686e2 100644
--- a/lib/x509/privkey_pkcs8.c
+++ b/lib/x509/privkey_pkcs8.c
@@ -1025,6 +1025,9 @@ _decode_pkcs8_dsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey)
goto error;
}
+ pkey->params.algo = GNUTLS_PK_DSA;
+ pkey->params.params_nr = DSA_PRIVATE_PARAMS;
+
ret =
_gnutls_asn1_encode_privkey(GNUTLS_PK_DSA, &pkey->key,
&pkey->params, pkey->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
@@ -1033,12 +1036,11 @@ _decode_pkcs8_dsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey)
goto error;
}
- pkey->params.algo = GNUTLS_PK_DSA;
- pkey->params.params_nr = DSA_PRIVATE_PARAMS;
-
- ret = 0;
+ return 0;
- error:
+ error:
+ if (pkey->params.params_nr != DSA_PRIVATE_PARAMS)
+ _gnutls_mpi_release(&pkey->params.params[4]);
return ret;
}