Skip to content

Commit 1c408c4

Browse files
committedAug 10, 2015
Make NetworkPacket respect serialized string size limits
1 parent 18cfd89 commit 1c408c4

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed
 

Diff for: ‎src/network/networkpacket.cpp

+11-7
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst)
8585
{
8686
checkReadOffset(m_read_offset, 2);
8787
u16 strLen = readU16(&m_data[m_read_offset]);
88-
m_read_offset += sizeof(u16);
88+
m_read_offset += 2;
8989

9090
dst.clear();
9191

@@ -105,8 +105,8 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst)
105105
NetworkPacket& NetworkPacket::operator<<(std::string src)
106106
{
107107
u16 msgsize = src.size();
108-
if (msgsize > 0xFFFF) {
109-
msgsize = 0xFFFF;
108+
if (msgsize > STRING_MAX_LEN) {
109+
throw PacketError("String too long");
110110
}
111111

112112
*this << msgsize;
@@ -119,8 +119,8 @@ NetworkPacket& NetworkPacket::operator<<(std::string src)
119119
void NetworkPacket::putLongString(std::string src)
120120
{
121121
u32 msgsize = src.size();
122-
if (msgsize > 0xFFFFFFFF) {
123-
msgsize = 0xFFFFFFFF;
122+
if (msgsize > LONG_STRING_MAX_LEN) {
123+
throw PacketError("String too long");
124124
}
125125

126126
*this << msgsize;
@@ -155,8 +155,8 @@ NetworkPacket& NetworkPacket::operator>>(std::wstring& dst)
155155
NetworkPacket& NetworkPacket::operator<<(std::wstring src)
156156
{
157157
u16 msgsize = src.size();
158-
if (msgsize > 0xFFFF) {
159-
msgsize = 0xFFFF;
158+
if (msgsize > WIDE_STRING_MAX_LEN) {
159+
throw PacketError("String too long");
160160
}
161161

162162
*this << msgsize;
@@ -179,6 +179,10 @@ std::string NetworkPacket::readLongString()
179179
return "";
180180
}
181181

182+
if (strLen > LONG_STRING_MAX_LEN) {
183+
throw PacketError("String too long");
184+
}
185+
182186
checkReadOffset(m_read_offset, strLen);
183187

184188
std::string dst;

0 commit comments

Comments
 (0)
Please sign in to comment.