vtls: revert "receive max buffer" + add test case

- add test_05_04 for requests using http/1.0, http/1.1 and h2 against an
  Apache resource that does an unclean TLS shutdown.
- revert special workarund in openssl.c for suppressing shutdown errors
  on multiplexed connections
- vlts.c restore to its state before 9a90c9dd64

Fixes #12885
Fixes #12844

Closes #12848
This commit is contained in:
Stefan Eissing 2024-02-01 18:15:50 +01:00 committed by Daniel Stenberg
parent 7cf8414fab
commit ed09a99af5
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
4 changed files with 41 additions and 24 deletions

View file

@ -1715,32 +1715,17 @@ static ssize_t ssl_cf_recv(struct Curl_cfilter *cf,
{
struct cf_call_data save;
ssize_t nread;
size_t ntotal = 0;
CF_DATA_SAVE(save, cf, data);
*err = CURLE_OK;
/* Do receive until we fill the buffer somehwhat or EGAIN, error or EOF */
while(!ntotal || (len - ntotal) > (4*1024)) {
*err = CURLE_OK;
nread = Curl_ssl->recv_plain(cf, data, buf + ntotal, len - ntotal, err);
if(nread < 0) {
if(*err == CURLE_AGAIN && ntotal > 0) {
/* we EAGAINed after having reed data, return the success amount */
*err = CURLE_OK;
break;
}
/* we have a an error to report */
goto out;
}
else if(nread == 0) {
/* eof */
break;
}
ntotal += (size_t)nread;
DEBUGASSERT((size_t)ntotal <= len);
nread = Curl_ssl->recv_plain(cf, data, buf, len, err);
if(nread > 0) {
DEBUGASSERT((size_t)nread <= len);
}
else if(nread == 0) {
/* eof */
*err = CURLE_OK;
}
nread = (ssize_t)ntotal;
out:
CURL_TRC_CF(data, cf, "cf_recv(len=%zu) -> %zd, %d", len,
nread, *err);
CF_DATA_RESTORE(cf, save);