From: Fabian Keil Date: Sat, 27 Mar 2021 09:16:00 +0000 (+0100) Subject: handle_established_connection(): Check for pending TLS data from the client X-Git-Tag: v_3_0_34~142 X-Git-Url: http://www.privoxy.org/gitweb/%40proxy-info-url%40?a=commitdiff_plain;h=b15aee14f3dc660a966acb7c3f542586a768a1a0;p=privoxy.git handle_established_connection(): Check for pending TLS data from the client ... before checking if data is available on the connection. The TLS library may have already consumed all the data from the client response in which case poll() and select() will not detect that data is available to be read. Sponsored by: Robert Klemme --- diff --git a/jcc.c b/jcc.c index 780969c2..36ac4f06 100644 --- a/jcc.c +++ b/jcc.c @@ -3109,6 +3109,16 @@ static void handle_established_connection(struct client_state *csp) */ goto server_wants_to_talk; } + if (watch_client_socket && client_use_ssl(csp) && + is_ssl_pending(&(csp->ssl_client_attr))) + { + /* + * The TLS libray may also consume all of the remaining data + * from the client when we're shuffling the data from an + * unbuffered request body to the server. + */ + goto client_wants_to_talk; + } #endif #ifndef HAVE_POLL FD_ZERO(&rfds); @@ -3250,7 +3260,13 @@ static void handle_established_connection(struct client_state *csp) if (FD_ISSET(csp->cfd, &rfds)) #endif /* def HAVE_POLL*/ { - int max_bytes_to_read = (int)csp->receive_buffer_size; + int max_bytes_to_read; + +#ifdef FEATURE_HTTPS_INSPECTION + client_wants_to_talk: +#endif + + max_bytes_to_read = (int)csp->receive_buffer_size; #ifdef FEATURE_CONNECTION_KEEP_ALIVE if ((csp->flags & CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ))