From a4988f5469dcac779846b209396955a8b7aed413 Mon Sep 17 00:00:00 2001 From: Norbert Federa Date: Fri, 27 Dec 2019 11:58:27 +0100 Subject: [PATCH] transport: check if layer was set to closed There are several code paths and error conditions where transport->layer is correctly set to TRANSPORT_LAYER_CLOSED but the required code for checking that state was missing. E.g. write errors in the rdg code resulted in marking the transport layer as closed but the transport code would indefinitely continue to read from the receiving socket. --- libfreerdp/core/transport.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libfreerdp/core/transport.c b/libfreerdp/core/transport.c index 3f7db6b..03ad9c8 100644 --- a/libfreerdp/core/transport.c +++ b/libfreerdp/core/transport.c @@ -1005,6 +1005,12 @@ int transport_check_fds(rdpTransport* transport) if (!transport) return -1; + if (transport->layer == TRANSPORT_LAYER_CLOSED) + { + WLog_Print(transport->log, WLOG_DEBUG, "transport_check_fds: transport layer closed"); + return -1; + } + dueDate = now + transport->settings->MaxTimeInCheckLoop; if (transport->haveMoreBytesToRead) -- 2.7.4