diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index a4a481db4..1e4b6e23e 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -72,8 +72,8 @@ char* NetworkPacket::getString(u32 from_offset) void NetworkPacket::putRawString(const char* src, u32 len) { - if (m_read_offset + len * sizeof(char) >= m_datasize) { - m_datasize += len * sizeof(char); + if (m_read_offset + len > m_datasize) { + m_datasize = m_read_offset + len; m_data.resize(m_datasize); } @@ -95,7 +95,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) dst.reserve(strLen); dst.append((char*)&m_data[m_read_offset], strLen); - m_read_offset += strLen * sizeof(char); + m_read_offset += strLen; return *this; } @@ -108,13 +108,7 @@ NetworkPacket& NetworkPacket::operator<<(std::string src) *this << msgsize; - if (m_read_offset + msgsize * sizeof(char) >= m_datasize) { - m_datasize += msgsize * sizeof(char); - m_data.resize(m_datasize); - } - - memcpy(&m_data[m_read_offset], src.c_str(), msgsize); - m_read_offset += msgsize; + putRawString(src.c_str(), (u32)msgsize); return *this; } @@ -128,13 +122,7 @@ void NetworkPacket::putLongString(std::string src) *this << msgsize; - if (m_read_offset + msgsize * sizeof(char) >= m_datasize) { - m_datasize += msgsize * sizeof(char); - m_data.resize(m_datasize); - } - - memcpy(&m_data[m_read_offset], src.c_str(), msgsize); - m_read_offset += msgsize; + putRawString(src.c_str(), msgsize); } NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) @@ -189,7 +177,7 @@ std::string NetworkPacket::readLongString() dst.reserve(strLen); dst.append((char*)&m_data[m_read_offset], strLen); - m_read_offset += strLen*sizeof(char); + m_read_offset += strLen; return dst; } diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 9ad169888..0d2015e7f 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -114,7 +114,7 @@ private: template void checkDataSize() { if (m_read_offset + sizeof(T) > m_datasize) { - m_datasize += sizeof(T); + m_datasize = m_read_offset + sizeof(T); m_data.resize(m_datasize); } }