From c3f82c53db08cc8919b54d53b38a8673f64e5dd8 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Thu, 6 Sep 2012 18:17:47 +0000 Subject: [PATCH] Fixed slot parsing in 1.2.5 causing weird behavior ( http://forum.mc-server.org/showthread.php?tid=551&pid=4413#pid4413 ) Also added some asserts into ByteBuffer so that this won't happen again. git-svn-id: http://mc-server.googlecode.com/svn/trunk@842 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/ByteBuffer.cpp | 5 +++++ source/Protocol125.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/source/ByteBuffer.cpp b/source/ByteBuffer.cpp index 4f74ca19f..9ab1e4ca0 100644 --- a/source/ByteBuffer.cpp +++ b/source/ByteBuffer.cpp @@ -350,6 +350,7 @@ bool cByteBuffer::WriteBEUTF16String16(const AString & a_Value) bool cByteBuffer::ReadBuf(void * a_Buffer, int a_Count) { + ASSERT(a_Count >= 0); NEEDBYTES(a_Count); char * Dst = (char *)a_Buffer; // So that we can do byte math int BytesToEndOfBuffer = m_BufferSize - m_ReadPos; @@ -374,6 +375,7 @@ bool cByteBuffer::ReadBuf(void * a_Buffer, int a_Count) bool cByteBuffer::WriteBuf(const void * a_Buffer, int a_Count) { + ASSERT(a_Count >= 0); PUTBYTES(a_Count); char * Src = (char *)a_Buffer; // So that we can do byte math int BytesToEndOfBuffer = m_BufferSize - m_WritePos; @@ -398,6 +400,7 @@ bool cByteBuffer::WriteBuf(const void * a_Buffer, int a_Count) bool cByteBuffer::ReadString(AString & a_String, int a_Count) { + ASSERT(a_Count >= 0); NEEDBYTES(a_Count); a_String.clear(); a_String.reserve(a_Count); @@ -423,6 +426,7 @@ bool cByteBuffer::ReadString(AString & a_String, int a_Count) bool cByteBuffer::ReadUTF16String(AString & a_String, int a_NumChars) { // Reads 2 * a_NumChars bytes and interprets it as a UTF16 string, converting it into UTF8 string a_String + ASSERT(a_NumChars >= 0); AString RawData; if (!ReadString(RawData, a_NumChars * 2)) { @@ -438,6 +442,7 @@ bool cByteBuffer::ReadUTF16String(AString & a_String, int a_NumChars) bool cByteBuffer::SkipRead(int a_Count) { + ASSERT(a_Count >= 0); if (!CanReadBytes(a_Count)) { return false; diff --git a/source/Protocol125.cpp b/source/Protocol125.cpp index 1927013da..da7e880ad 100644 --- a/source/Protocol125.cpp +++ b/source/Protocol125.cpp @@ -1310,7 +1310,7 @@ int cProtocol125::ParseItem(cItem & a_Item) HANDLE_PACKET_READ(ReadBEShort, short, EnchantNumBytes); - if (EnchantNumBytes == 0) + if (EnchantNumBytes <= 0) { return PARSE_OK; }