rustls: Handle close_notify.

If we get a close_notify, treat that as EOF. If we get an EOF from the
TCP stream, treat that as an error (because we should have ended the
connection earlier, when we got a close_notify).

Closes #6763
This commit is contained in:
Jacob Hoffman-Andrews 2021-03-17 21:27:12 -07:00 committed by Daniel Stenberg
parent 472b537215
commit 7488ef2960
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -112,7 +112,7 @@ cr_recv(struct Curl_easy *data, int sockindex,
tls_bytes_read = sread(sockfd, backend->tlsbuf, TLSBUF_SIZE);
if(tls_bytes_read == 0) {
failf(data, "EOF in sread");
failf(data, "connection closed without TLS close_notify alert");
*err = CURLE_READ_ERROR;
return -1;
}
@ -163,7 +163,11 @@ cr_recv(struct Curl_easy *data, int sockindex,
(uint8_t *)plainbuf + plain_bytes_copied,
plainlen - plain_bytes_copied,
&n);
if(rresult != RUSTLS_RESULT_OK) {
if(rresult == RUSTLS_RESULT_ALERT_CLOSE_NOTIFY) {
*err = CURLE_OK;
return 0;
}
else if(rresult != RUSTLS_RESULT_OK) {
failf(data, "error in rustls_client_session_read");
*err = CURLE_READ_ERROR;
return -1;