]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bug #5170 - simplify i2d_X509
authorMarek Majkowski <marek@popcount.org>
Thu, 6 Jun 2013 11:45:25 +0000 (12:45 +0100)
committerMarek Majkowski <marek@popcount.org>
Thu, 6 Jun 2013 11:45:25 +0000 (12:45 +0100)
src/common/tortls.c

index b7e5bc1a5fe3b922bc4013f64dfb512278630621..0773068a44fe5b0f1261329c4dcae24042f2b77b 100644 (file)
@@ -806,24 +806,24 @@ tor_cert_new(X509 *x509_cert)
   tor_cert_t *cert;
   EVP_PKEY *pkey;
   RSA *rsa;
-  int length, length2;
-  unsigned char *cp;
+  int length;
+  unsigned char *buf = NULL;
 
   if (!x509_cert)
     return NULL;
 
-  length = i2d_X509(x509_cert, NULL);
+  length = i2d_X509(x509_cert, &buf);
   cert = tor_malloc_zero(sizeof(tor_cert_t));
-  if (length <= 0) {
+  if (length <= 0 || buf == NULL) {
     tor_free(cert);
     log_err(LD_CRYPTO, "Couldn't get length of encoded x509 certificate");
     X509_free(x509_cert);
     return NULL;
   }
   cert->encoded_len = (size_t) length;
-  cp = cert->encoded = tor_malloc(length);
-  length2 = i2d_X509(x509_cert, &cp);
-  tor_assert(length2 == length);
+  cert->encoded = tor_malloc(length);
+  memcpy(cert->encoded, buf, length);
+  OPENSSL_free(buf);
 
   cert->cert = x509_cert;