]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Debug one last reference-counting issue that only appeared on openssl master
authorNick Mathewson <nickm@torproject.org>
Wed, 5 Sep 2018 00:46:46 +0000 (20:46 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 5 Sep 2018 00:46:46 +0000 (20:46 -0400)
src/lib/tls/tortls_openssl.c
src/test/test_tortls.c

index ab9712962b0f42a89144f5c113fe9a176ee034e6..cfe859adf38ef2848574da16b9689d98352c0520 100644 (file)
@@ -1380,8 +1380,7 @@ tor_tls_get_own_cert,(tor_tls_t *tls))
  * *<b>id_cert_out</b> respectively.  Log all messages at level
  * <b>severity</b>.
  *
- * Note that a reference is added to cert_out, so it needs to be
- * freed. id_cert_out doesn't. */
+ * Note that a reference is added both of the returned certificates. */
 MOCK_IMPL(void,
 try_to_extract_certs_from_tls,(int severity, tor_tls_t *tls,
                                X509 **cert_out, X509 **id_cert_out))
@@ -1411,7 +1410,7 @@ try_to_extract_certs_from_tls,(int severity, tor_tls_t *tls,
     if (X509_cmp(id_cert, cert) != 0)
       break;
   }
-  *id_cert_out = id_cert;
+  *id_cert_out = id_cert ? X509_dup(id_cert) : NULL;
 }
 
 /** Return the number of bytes available for reading from <b>tls</b>.
index 8e8487a4083e1d1781227474147aa0df9bf03944..7ab4b5c2aa777013dba514b7d6fafb87a9530adb 100644 (file)
@@ -133,8 +133,10 @@ fixed_try_to_extract_certs_from_tls(int severity, tor_tls_t *tls,
 {
   (void) severity;
   (void) tls;
-  *cert_out = fixed_try_to_extract_certs_from_tls_cert_out_result;
-  *id_cert_out = fixed_try_to_extract_certs_from_tls_id_cert_out_result;
+  *cert_out = tor_x509_cert_impl_dup_(
+                      fixed_try_to_extract_certs_from_tls_cert_out_result);
+  *id_cert_out =  tor_x509_cert_impl_dup_(
+                      fixed_try_to_extract_certs_from_tls_id_cert_out_result);
 }
 
 static void
@@ -498,6 +500,10 @@ test_tortls_verify(void *ignored)
   UNMOCK(try_to_extract_certs_from_tls);
   tor_x509_cert_impl_free(cert1);
   tor_x509_cert_impl_free(cert2);
+  tor_x509_cert_impl_free(validCert);
+  tor_x509_cert_impl_free(invalidCert);
+  tor_x509_cert_impl_free(caCert);
+
   tor_free(tls);
   crypto_pk_free(k);
 }