From addc19296541faf5bbbb0c17bdeb2dc599423d0d Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Sun, 3 Jul 2011 18:01:37 +0800 Subject: [PATCH] libfreerdp-core: TPKT length is big-endian. --- include/freerdp/utils/stream.h | 9 +++++++++ libfreerdp-core/tpkt.c | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/freerdp/utils/stream.h b/include/freerdp/utils/stream.h index 9f6c1d372..ebcced2d3 100644 --- a/include/freerdp/utils/stream.h +++ b/include/freerdp/utils/stream.h @@ -116,5 +116,14 @@ stream_extend(STREAM * stream); (((uint64)(*(_s->ptr + 7))) << 56); \ } while (0) +#define stream_read_uint16_be(_s, _v) do { _v = \ + (((uint16)(*_s->ptr)) << 8) + \ + (uint16)(*(_s->ptr + 1)); \ + _s->ptr += 2; } while (0) + +#define stream_write_uint16_be(_s, _v) do { \ + *_s->ptr++ = ((_v) >> 8) & 0xFF; \ + *_s->ptr++ = (_v) & 0xFF; } while (0) + #endif /* __STREAM_UTILS_H */ diff --git a/libfreerdp-core/tpkt.c b/libfreerdp-core/tpkt.c index ad6bf61fd..0bc5814ff 100644 --- a/libfreerdp-core/tpkt.c +++ b/libfreerdp-core/tpkt.c @@ -64,7 +64,7 @@ tpkt_read_header(STREAM* s) if (version == 3) { stream_seek(s, 2); - stream_read_uint16(s, length); + stream_read_uint16_be(s, length); } else { @@ -80,5 +80,5 @@ tpkt_write_header(STREAM* s, int length) { stream_write_uint8(s, 3); /* version */ stream_write_uint8(s, 8); /* reserved */ - stream_write_uint16(s, length); /* length */ + stream_write_uint16_be(s, length); /* length */ }