From 4610ab9d935495d08acbb7e82bf251c18848f56c Mon Sep 17 00:00:00 2001
From: Fabian Keil <fk@fabiankeil.de>
Date: Fri, 26 Mar 2021 14:14:12 +0100
Subject: [PATCH] receive_and_send_encrypted_post_data(): Additionally check
 for data being available

Previously we relied on the TLS library reading more data from
the wire than we read in which case the is_ssl_pending() check
worked.

Sponsored by: Robert Klemme
---
 jcc.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/jcc.c b/jcc.c
index 23679b53..c8367e54 100644
--- a/jcc.c
+++ b/jcc.c
@@ -2370,8 +2370,9 @@ static int receive_and_send_encrypted_post_data(struct client_state *csp)
 {
    int content_length_known = csp->expected_client_content_length != 0;
 
-   while (is_ssl_pending(&(csp->ssl_client_attr))
-      || (content_length_known && csp->expected_client_content_length != 0))
+   while ((content_length_known && csp->expected_client_content_length != 0) ||
+      (is_ssl_pending(&(csp->ssl_client_attr)) ||
+            data_is_available(csp->cfd, csp->config->socket_timeout)))
    {
       unsigned char buf[BUFFER_SIZE];
       int len;
-- 
2.49.0