aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-08-25 11:38:24 -0400
committerNick Mathewson <nickm@torproject.org>2017-08-25 11:38:24 -0400
commit6069c829f90576c04a0802d2a108378a2bbabb7a (patch)
treeaaaf670a9e79384e0d83f5b8a04738636fef9566 /src/common
parent10b242822490c9873138565bcc8a3565a7dc7014 (diff)
parent418f3d6298beb27e050618e2f59e01d6d3b2f45b (diff)
downloadtor-6069c829f90576c04a0802d2a108378a2bbabb7a.tar.gz
tor-6069c829f90576c04a0802d2a108378a2bbabb7a.zip
Merge branch 'bug19418_029' into maint-0.3.1
Diffstat (limited to 'src/common')
-rw-r--r--src/common/tortls.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 44db3aec58..1c47cf9882 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -676,12 +676,7 @@ tor_x509_cert_new,(X509 *x509_cert))
length = i2d_X509(x509_cert, &buf);
cert = tor_malloc_zero(sizeof(tor_x509_cert_t));
if (length <= 0 || buf == NULL) {
- /* LCOV_EXCL_START for the same reason as the exclusion above */
- tor_free(cert);
- log_err(LD_CRYPTO, "Couldn't get length of encoded x509 certificate");
- X509_free(x509_cert);
- return NULL;
- /* LCOV_EXCL_STOP */
+ goto err;
}
cert->encoded_len = (size_t) length;
cert->encoded = tor_malloc(length);
@@ -696,13 +691,25 @@ tor_x509_cert_new,(X509 *x509_cert))
if ((pkey = X509_get_pubkey(x509_cert)) &&
(rsa = EVP_PKEY_get1_RSA(pkey))) {
crypto_pk_t *pk = crypto_new_pk_from_rsa_(rsa);
- crypto_pk_get_common_digests(pk, &cert->pkey_digests);
+ if (crypto_pk_get_common_digests(pk, &cert->pkey_digests) < 0) {
+ crypto_pk_free(pk);
+ EVP_PKEY_free(pkey);
+ goto err;
+ }
+
cert->pkey_digests_set = 1;
crypto_pk_free(pk);
EVP_PKEY_free(pkey);
}
return cert;
+ err:
+ /* LCOV_EXCL_START for the same reason as the exclusion above */
+ tor_free(cert);
+ log_err(LD_CRYPTO, "Couldn't wrap encoded X509 certificate.");
+ X509_free(x509_cert);
+ return NULL;
+ /* LCOV_EXCL_STOP */
}
/** Return a new copy of <b>cert</b>. */