]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
OpenSSL 1.1.0-pre5-dev and later made BIO opaque.
authorYawning Angel <yawning@schwanenlied.me>
Mon, 4 Apr 2016 04:08:54 +0000 (04:08 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 5 Apr 2016 14:03:24 +0000 (10:03 -0400)
Detect newer versions and fix our TLS code to use the new API.

src/common/tortls.c

index fe21875f91c140251b7b61152c8462b132b7f764..4ffc672546c90ec69b05aa9696b234b92e4979b7 100644 (file)
@@ -2274,8 +2274,18 @@ tor_tls_get_n_raw_bytes(tor_tls_t *tls, size_t *n_read, size_t *n_written)
    * save the original BIO for  tls->ssl in the tor_tls_t structure, but
    * that would be tempting fate. */
   wbio = SSL_get_wbio(tls->ssl);
+#if OPENSSL_VERSION_NUMBER >= OPENSSL_VER(1,1,0,0,5)
+  /* BIO structure is opaque as of OpenSSL 1.1.0-pre5-dev.  Again, not
+   * supposed to use this form of the version macro, but the OpenSSL developers
+   * introduced major API changes in the pre-release stage.
+   */
+  if (BIO_method_type(wbio) == BIO_TYPE_BUFFER &&
+        (tmpbio = BIO_next(wbio)) != NULL)
+    wbio = tmpbio;
+#else
   if (wbio->method == BIO_f_buffer() && (tmpbio = BIO_next(wbio)) != NULL)
     wbio = tmpbio;
+#endif
   w = BIO_number_written(wbio);
 
   /* We are ok with letting these unsigned ints go "negative" here: