From 0e828bd657152497f425fa89abb25ca20376baf8 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 9 Jan 2024 16:19:41 +0100 Subject: [PATCH] [core,peer] properly handle out of sequence PDU If the peer state machine is in state CONNECTION_STATE_CAPABILITIES_EXCHANGE_MONITOR_LAYOUT properly check for available data. If a PDU was received in this state it is an out of sequence PDU (that might happen during deactivation/reactivation) and must be parsed. --- libfreerdp/core/peer.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libfreerdp/core/peer.c b/libfreerdp/core/peer.c index e6f9428c8..2aaf9ceea 100644 --- a/libfreerdp/core/peer.c +++ b/libfreerdp/core/peer.c @@ -1035,6 +1035,10 @@ static state_run_t peer_recv_callback_internal(rdpTransport* transport, wStream* else ret = STATE_RUN_SUCCESS; free(monitors); + + const size_t len = Stream_GetRemainingLength(s); + if (!state_run_failed(ret) && (len > 0)) + ret = STATE_RUN_CONTINUE; } else {