From b15aee14f3dc660a966acb7c3f542586a768a1a0 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sat, 27 Mar 2021 10:16:00 +0100 Subject: [PATCH 1/1] 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 --- jcc.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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)) -- 2.39.2