Skip to content

Commit 9323680

Browse files
committed
Fix readStringWithoutNull, readStringWithNull more
1 parent 9051139 commit 9323680

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

Core/GameEngine/Include/GameNetwork/NetPacketStructs.h

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,22 +119,31 @@ inline size_t readBytes(UnsignedByte *dest, size_t destLen, NetPacketBuf src)
119119
inline size_t readStringWithoutNull(UnicodeString &str, size_t maxStrLen, NetPacketBuf src)
120120
{
121121
const size_t strLen = min(maxStrLen, src.size() / sizeof(WideChar));
122-
const size_t readLen = strLen * sizeof(WideChar);
123-
WideChar *strBuf = str.getBufferForRead(strLen);
124-
memcpy(strBuf, src.data(), readLen);
125-
strBuf[strLen] = 0;
126-
return readLen;
122+
const size_t cpyLen = strLen * sizeof(WideChar);
123+
124+
if (strLen > 0)
125+
{
126+
WideChar *strBuf = str.getBufferForRead(strLen);
127+
memcpy(strBuf, src.data(), cpyLen);
128+
strBuf[strLen] = 0;
129+
}
130+
return cpyLen;
127131
}
128132

129133
inline size_t readStringWithNull(AsciiString &str, size_t maxStrLen, NetPacketBuf src)
130134
{
131135
const size_t realStrLen = strnlen(reinterpret_cast<const char*>(src.data()), src.size());
132136
const size_t usedStrLen = min(realStrLen, maxStrLen);
133-
const size_t readLen = usedStrLen;
134-
char *strBuf = str.getBufferForRead(usedStrLen);
135-
memcpy(strBuf, src.data(), readLen);
136-
strBuf[usedStrLen] = 0;
137-
return realStrLen + 1;
137+
const size_t realCpyLen = realStrLen * sizeof(char);
138+
const size_t usedCpyLen = usedStrLen * sizeof(char);
139+
140+
if (usedStrLen > 0)
141+
{
142+
char *strBuf = str.getBufferForRead(usedStrLen);
143+
memcpy(strBuf, src.data(), usedCpyLen);
144+
strBuf[usedStrLen] = 0;
145+
}
146+
return realCpyLen + sizeof(char);
138147
}
139148

140149
template<typename T>

0 commit comments

Comments
 (0)