]> granicus.if.org Git - curl/commitdiff
OpenSSL: fix erroneous SSL backend encapsulation
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 6 Sep 2017 22:04:06 +0000 (00:04 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 7 Sep 2017 14:06:50 +0000 (16:06 +0200)
In d65e6cc4f (vtls: prepare the SSL backends for encapsulated private
data, 2017-06-21), this developer prepared for a separation of the
private data of the SSL backends from the general connection data.

This conversion was partially automated (search-and-replace) and
partially manual (e.g. proxy_ssl's backend data).

Sadly, there was a crucial error in the manual part, where the wrong
handle was used: rather than connecting ssl[sockindex]' BIO to the
proxy_ssl[sockindex]', we reconnected proxy_ssl[sockindex]. The reason
was an incorrect location to paste "BACKEND->"... d'oh.

Reported by Jay Satiro in https://github.com/curl/curl/issues/1855.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
lib/vtls/openssl.c

index a05c994fdc10775e3c1d9011b64b3ca3e11d5132..c3b935f381139f389c9bf0f0624655697ea8fe2e 100644 (file)
@@ -2457,10 +2457,10 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     BIO *const bio = BIO_new(BIO_f_ssl());
     SSL *handle = conn->proxy_ssl[sockindex].backend->handle;
     DEBUGASSERT(ssl_connection_complete == conn->proxy_ssl[sockindex].state);
-    DEBUGASSERT(BACKEND->handle != NULL);
+    DEBUGASSERT(handle != NULL);
     DEBUGASSERT(bio != NULL);
     BIO_set_ssl(bio, handle, FALSE);
-    SSL_set_bio(handle, bio, bio);
+    SSL_set_bio(BACKEND->handle, bio, bio);
   }
   else if(!SSL_set_fd(BACKEND->handle, (int)sockfd)) {
     /* pass the raw socket into the SSL layers */