diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2013-06-08 22:44:53 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2013-06-08 22:44:57 +0200 |
commit | 877842e413daf830114939dc6915d225c40197c3 (patch) | |
tree | 0081e5c574ae77fffe0f38a2cb1383eee8c48e64 | |
parent | f9cd8a5d6b4460ffcb945979d1e8cd8ebadc9b8d (diff) | |
download | mana-877842e413daf830114939dc6915d225c40197c3.tar.gz mana-877842e413daf830114939dc6915d225c40197c3.tar.bz2 mana-877842e413daf830114939dc6915d225c40197c3.tar.xz mana-877842e413daf830114939dc6915d225c40197c3.zip |
Fixed MessageIn::getUnreadLength
It should not return large numbers after reading past the end of a
message. This can cause infinite loops in several places in the client
when a message happened to be shorter than expected.
-rw-r--r-- | src/net/manaserv/messagein.h | 5 | ||||
-rw-r--r-- | src/net/tmwa/messagein.h | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/net/manaserv/messagein.h b/src/net/manaserv/messagein.h index 89ae5ed8..1edc4fe7 100644 --- a/src/net/manaserv/messagein.h +++ b/src/net/manaserv/messagein.h @@ -52,7 +52,10 @@ class MessageIn /** * Returns the length of unread data. */ - unsigned int getUnreadLength() const { return mLength - mPos; } + unsigned int getUnreadLength() const + { + return (mPos < mLength) ? mLength - mPos : 0; + } /** * Reads an unsigned 8-bit integer from the message. diff --git a/src/net/tmwa/messagein.h b/src/net/tmwa/messagein.h index 48121187..2f66ca28 100644 --- a/src/net/tmwa/messagein.h +++ b/src/net/tmwa/messagein.h @@ -50,7 +50,10 @@ class MessageIn /** * Returns the length of unread data. */ - unsigned int getUnreadLength() const { return mLength - mPos; } + unsigned int getUnreadLength() const + { + return (mPos < mLength) ? mLength - mPos : 0; + } /** * Reads an unsigned 8-bit integer from the message. |