summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Satiro <raysatiro@yahoo.com>2017-09-24 01:42:37 -0400
committerJay Satiro <raysatiro@yahoo.com>2017-12-08 17:43:36 -0500
commit9dfb19483366d5cb2d020328330b164603f71bc8 (patch)
tree2b049c18fa9ef448d04ca83ed76f488ae40274bc
parent9ffad8eb1329bb35c8988115ac7ed85cf91ef955 (diff)
downloadcurl-9dfb19483366d5cb2d020328330b164603f71bc8.tar.gz
openssl: improve data-pending check for https proxy
- Allow proxy_ssl to be checked for pending data even when connssl does not yet have an SSL handle. This change is for posterity. Currently there doesn't seem to be a code path that will cause a pending data check when proxyssl could have pending data and the connssl handle doesn't yet exist [1]. [1]: Recall that an https proxy connection starts out in connssl but if the destination is also https then the proxy SSL backend data is moved from connssl to proxyssl, which means connssl handle is temporarily empty until an SSL handle for the destination can be created. Ref: https://github.com/curl/curl/commit/f4a6238#commitcomment-24396542 Closes https://github.com/curl/curl/pull/1916
-rw-r--r--lib/vtls/openssl.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c
index d0f525523..4659c7997 100644
--- a/lib/vtls/openssl.c
+++ b/lib/vtls/openssl.c
@@ -3383,12 +3383,13 @@ static bool Curl_ossl_data_pending(const struct connectdata *conn,
{
const struct ssl_connect_data *connssl = &conn->ssl[connindex];
const struct ssl_connect_data *proxyssl = &conn->proxy_ssl[connindex];
- if(BACKEND->handle)
- /* SSL is in use */
- return (0 != SSL_pending(BACKEND->handle) ||
- (proxyssl->backend->handle &&
- 0 != SSL_pending(proxyssl->backend->handle))) ?
- TRUE : FALSE;
+
+ if(connssl->backend->handle && SSL_pending(connssl->backend->handle))
+ return TRUE;
+
+ if(proxyssl->backend->handle && SSL_pending(proxyssl->backend->handle))
+ return TRUE;
+
return FALSE;
}