From 568fdeb28297266364d5f7faf38b839fabed9937 Mon Sep 17 00:00:00 2001 From: Thorvald Natvig Date: Fri, 7 Sep 2007 02:09:40 +0000 Subject: More gracefully handle oversized outgoing packets from murmur git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@763 05730e5d-ab1b-0410-a4ac-84af385074fa --- src/PacketDataStream.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/PacketDataStream.h') diff --git a/src/PacketDataStream.h b/src/PacketDataStream.h index 07ed08e15..043080260 100644 --- a/src/PacketDataStream.h +++ b/src/PacketDataStream.h @@ -40,6 +40,7 @@ class PacketDataStream { unsigned char *data; quint32 maxsize; quint32 offset; + quint32 overshoot; bool ok; public: quint32 size() const { @@ -57,12 +58,18 @@ class PacketDataStream { quint32 left() const { return maxsize - offset; } + + quint32 undersize() const { + return overshoot; + } void append(const quint32 v) { if (offset < maxsize) data[offset++] = v; - else + else { ok = false; + overshoot++; + } }; void append(const char *d, quint32 len) { @@ -70,6 +77,10 @@ class PacketDataStream { memcpy(& data[offset], d, len); offset += len; } else { + int l = left(); + memset(& data[offset], 0, l); + offset += l; + overshoot += len - l; ok = false; } } @@ -121,6 +132,7 @@ class PacketDataStream { void setup(unsigned char *d, int msize) { data = d; offset = 0; + overshoot = 0; maxsize = msize; ok = true; } -- cgit v1.2.3