summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2013-02-17 09:26:52 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2013-02-17 09:26:52 +0100
commit1c4215259fdbb129a1e3f2f2d8c6a65313dd2151 (patch)
tree2fd78d4112471cc952ec76d889975064208bf7fa
parent0843843e91b1d74dbe1871d1bc78b33cf2af87dd (diff)
downloadgnutls-1c4215259fdbb129a1e3f2f2d8c6a65313dd2151.tar.gz
better cleanup on error on export case
-rw-r--r--lib/auth/rsa.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/lib/auth/rsa.c b/lib/auth/rsa.c
index 02ae265ec6..f2b9d5e850 100644
--- a/lib/auth/rsa.c
+++ b/lib/auth/rsa.c
@@ -94,7 +94,6 @@ _gnutls_get_public_rsa_params (gnutls_session_t session,
}
gnutls_pk_params_init(params);
- params->params_nr = RSA_PUBLIC_PARAMS;
/* EXPORT case: */
if (_gnutls_cipher_suite_get_kx_algo
@@ -109,25 +108,36 @@ _gnutls_get_public_rsa_params (gnutls_session_t session,
goto cleanup;
}
- for (i = 0; i < params->params_nr; i++)
+ for (i = 0; i < RSA_PUBLIC_PARAMS; i++)
{
params->params[i] = _gnutls_mpi_copy (session->key.rsa[i]);
+ if (params->params[i] != NULL)
+ params->params_nr++;
+ else
+ {
+ ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
+ goto cleanup;
+ }
}
-
- ret = 0;
- goto cleanup;
+
+ goto done;
}
ret = _gnutls_pubkey_get_mpis(peer_cert.pubkey, params);
if (ret < 0)
{
ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR);
- goto cleanup;
+ goto cleanup2;
}
- ret = 0;
+done:
+ gnutls_pcert_deinit (&peer_cert);
+ return 0;
cleanup:
+ for (i=0;i<params->params_nr;i++)
+ _gnutls_mpi_release(params->params[i]);
+cleanup2:
gnutls_pcert_deinit (&peer_cert);
return ret;