diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-08-25 11:38:24 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-08-25 11:38:24 -0400 |
commit | 6069c829f90576c04a0802d2a108378a2bbabb7a (patch) | |
tree | aaaf670a9e79384e0d83f5b8a04738636fef9566 /src/common | |
parent | 10b242822490c9873138565bcc8a3565a7dc7014 (diff) | |
parent | 418f3d6298beb27e050618e2f59e01d6d3b2f45b (diff) | |
download | tor-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.c | 21 |
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>. */ |