diff --git a/libfreerdp-core/update.c b/libfreerdp-core/update.c index ce3ea9e59..52c3b024c 100644 --- a/libfreerdp-core/update.c +++ b/libfreerdp-core/update.c @@ -189,6 +189,25 @@ void update_recv(rdpUpdate* update, STREAM* s) } IFCALL(update->EndPaint, update); + + if (stream_get_left(s) > RDP_SHARE_DATA_HEADER_LENGTH) + { + uint8 type; + uint16 pduType; + uint16 length; + uint16 source; + uint32 shareId; + + rdp_read_share_control_header(s, &length, &pduType, &source); + + if (pduType != PDU_TYPE_DATA) + return; + + rdp_read_share_data_header(s, &length, &type, &shareId); + + if (type == DATA_PDU_TYPE_UPDATE) + update_recv(update, s); + } } rdpUpdate* update_new(rdpRdp* rdp)