diff --git a/libxrdp/xrdp_rdp.c b/libxrdp/xrdp_rdp.c index c8e9698b..1eea4f46 100644 --- a/libxrdp/xrdp_rdp.c +++ b/libxrdp/xrdp_rdp.c @@ -226,14 +226,16 @@ xrdp_rdp_recv(struct xrdp_rdp* self, struct stream* s, int* code) { s->p = s->next_packet; } - in_uint16_le(s, len); - if (len == 0x8000) + if (!s_check_rem(s, 6)) { - s->next_packet += 8; + s->next_packet = 0; *code = 0; DEBUG(("out xrdp_rdp_recv")); + len = (int)(s->end - s->p); + g_writeln("xrdp_rdp_recv: bad RDP packet, length [%d]", len); return 0; } + in_uint16_le(s, len); in_uint16_le(s, pdu_code); *code = pdu_code & 0xf; in_uint8s(s, 2); /* mcs user id */