Make NetworkPacket respect serialized string size limits

master
kwolekr 2015-08-10 02:16:55 -04:00
parent 18cfd89a86
commit 1c408c4f1d
1 changed files with 11 additions and 7 deletions

View File

@ -85,7 +85,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst)
{
checkReadOffset(m_read_offset, 2);
u16 strLen = readU16(&m_data[m_read_offset]);
m_read_offset += sizeof(u16);
m_read_offset += 2;
dst.clear();
@ -105,8 +105,8 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst)
NetworkPacket& NetworkPacket::operator<<(std::string src)
{
u16 msgsize = src.size();
if (msgsize > 0xFFFF) {
msgsize = 0xFFFF;
if (msgsize > STRING_MAX_LEN) {
throw PacketError("String too long");
}
*this << msgsize;
@ -119,8 +119,8 @@ NetworkPacket& NetworkPacket::operator<<(std::string src)
void NetworkPacket::putLongString(std::string src)
{
u32 msgsize = src.size();
if (msgsize > 0xFFFFFFFF) {
msgsize = 0xFFFFFFFF;
if (msgsize > LONG_STRING_MAX_LEN) {
throw PacketError("String too long");
}
*this << msgsize;
@ -155,8 +155,8 @@ NetworkPacket& NetworkPacket::operator>>(std::wstring& dst)
NetworkPacket& NetworkPacket::operator<<(std::wstring src)
{
u16 msgsize = src.size();
if (msgsize > 0xFFFF) {
msgsize = 0xFFFF;
if (msgsize > WIDE_STRING_MAX_LEN) {
throw PacketError("String too long");
}
*this << msgsize;
@ -179,6 +179,10 @@ std::string NetworkPacket::readLongString()
return "";
}
if (strLen > LONG_STRING_MAX_LEN) {
throw PacketError("String too long");
}
checkReadOffset(m_read_offset, strLen);
std::string dst;