diff --git a/Userland/Libraries/LibTLS/Socket.cpp b/Userland/Libraries/LibTLS/Socket.cpp index 9e13824eb9e..bfdea5c306f 100644 --- a/Userland/Libraries/LibTLS/Socket.cpp +++ b/Userland/Libraries/LibTLS/Socket.cpp @@ -66,6 +66,7 @@ ErrorOr> TLSv12::connect(ByteString const& host, u16 port, }; TRY(promise->await()); + tls_socket->m_context.should_expect_successful_read = true; return tls_socket; } @@ -83,6 +84,7 @@ ErrorOr> TLSv12::connect(ByteString const& host, Core::Soc promise->reject(AK::Error::from_string_view(enum_to_string(alert))); }; TRY(promise->await()); + tls_socket->m_context.should_expect_successful_read = true; return tls_socket; } @@ -174,7 +176,7 @@ ErrorOr TLSv12::read_from_socket() consume(read_bytes); } while (!read_bytes.is_empty() && !m_context.critical_error); - if (read_bytes.is_empty()) { + if (m_context.should_expect_successful_read && read_bytes.is_empty()) { // read_some() returned an empty span, this is either an EOF (from improper closure) // or some sort of weird even that is showing itself as an EOF. // To guard against servers closing the connection weirdly or just improperly, make sure diff --git a/Userland/Libraries/LibTLS/TLSv12.h b/Userland/Libraries/LibTLS/TLSv12.h index 527694f4807..806fd9ff9b0 100644 --- a/Userland/Libraries/LibTLS/TLSv12.h +++ b/Userland/Libraries/LibTLS/TLSv12.h @@ -271,6 +271,7 @@ struct Context { u64 local_sequence_number { 0 }; ConnectionStatus connection_status { ConnectionStatus::Disconnected }; + bool should_expect_successful_read { false }; u8 critical_error { 0 }; Error error_code { Error::NoError };