Merge branch 'bug19418_029' into maint-0.3.1

This commit is contained in:
Nick Mathewson
2017-08-25 11:38:24 -04:00
10 changed files with 63 additions and 16 deletions
+14 -7
View File
@@ -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>. */