receive_and_send_encrypted_post_data(): Additionally check for data being available
authorFabian Keil <fk@fabiankeil.de>
Fri, 26 Mar 2021 13:14:12 +0000 (14:14 +0100)
committerFabian Keil <fk@fabiankeil.de>
Sat, 23 Apr 2022 08:43:56 +0000 (10:43 +0200)
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

diff --git a/jcc.c b/jcc.c
index 23679b5..c8367e5 100644 (file)
--- 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;
 
 {
    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;
    {
       unsigned char buf[BUFFER_SIZE];
       int len;